C# 将xml序列化到自定义类中,然后将值添加到可观察的集合中
如何将数据序列化为xml,XBMC是我的自定义类C# 将xml序列化到自定义类中,然后将值添加到可观察的集合中,c#,.net,xml,C#,.net,Xml,如何将数据序列化为xml,XBMC是我的自定义类 private static XBMC LoadXbmcShows(string XMlFile) { XBMC XBMCSShowsList; TextReader Reader = new StreamReader(XMlFile); XmlSerializer serializer = new XmlSerializer(typeof(XBMC)); XBMCSShowsList = (XBMC)serial
private static XBMC LoadXbmcShows(string XMlFile)
{
XBMC XBMCSShowsList;
TextReader Reader = new StreamReader(XMlFile);
XmlSerializer serializer = new XmlSerializer(typeof(XBMC));
XBMCSShowsList = (XBMC)serializer.Deserialize(Reader);
Reader.Close();
return XBMCSShowsList;
}
XBMC XBMCSList = LoadXbmcShows(_XMLFile);
这就是我如何创建可观测集合的方法
:
readonly ObservableCollection<XBMC> myCollection
= new ObservableCollection<XBMC>()
public ObservableCollection<XBMC> MyCollection
{ get { return myCollection; } }
您的意思是:如何将反序列化结果添加到列表中?下面是我反序列化并添加到构造函数中的示例:
private static XBMC LoadXbmcShows(string XMlFile)
{
XBMC XBMCSShowsList;
TextReader Reader = new StreamReader(XMlFile);
XmlSerializer serializer = new XmlSerializer(typeof(XBMC));
XBMCSShowsList = (XBMC)serializer.Deserialize(Reader);
Reader.Close();
return XBMCSShowsList;
}
readonly ObservableCollection<XBMCShow> myCollection =
new ObservableCollection<XBMCShow>()
public ObservableCollection<XBMCShow> MyCollection
{ get { return myCollection; } }
public MainWindow()
{
InitializeComponent();
XBMC XBMCSList = LoadXbmcShows(_XMLFile);
myCollection = new new ObservableCollection<XBMCShow>(XBMCSList.Show);
Showlistbox.ItemsSource = myCollection;
}
。。以及XAML:
<ListBox x:Name="Showlistbox">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ShowName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
XBMCSList是一个XBMC
还是几个?变量名有点误导PS:对于IDisposable对象(StreamReader是IDisposable),使用(var reader=new StreamReader(xmlfile)){…do sthng…}这样的模式,即使反序列化引发异常,您的读取器也将被关闭和释放。如果您愿意,我可以添加类定义和xml文件的内容?是的,这就是我想要说的,我键入了您的代码,它只是说'MySQlXML.MainWindow.MyCollection'是一个'property',但用作'type',这个错误'MySQlXML.MainWindow.XBMCSList'是一个'field',但用作'type'。您在方法中运行这两行吗?你能分享代码吗?不,我只是做了这个readonly observedcollection myCollection=new observedcollection()public observedcollection myCollection{get{return myCollection;}}XBMC XBMCSList=LoadXbmcShows(_XMLFile);MyCollection.Add(XBMCSList)代码>您必须在方法、构造函数或其他东西中执行,而不是直接在属性和字段之间的类中执行!好的,我为ht主窗口添加了代码,这样您就可以看到发生了什么
public partial class XBMC
{
private XBMCShow[] showField;
[System.Xml.Serialization.XmlElementAttribute("Show")]
public XBMCShow[] Show
{
get { return this.showField; }
set { this.showField = value; }
}
}
<ListBox x:Name="Showlistbox">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ShowName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>