C# 尝试将对象序列化为XML
使用WP7&C#: 我正在尝试将我的对象转换为XML,以便将该文件保存到SkyDrive。我尝试过很多例子,但运气不好。有了这个密码,我C# 尝试将对象序列化为XML,c#,silverlight,windows-phone-7,xml-serialization,C#,Silverlight,Windows Phone 7,Xml Serialization,使用WP7&C#: 我正在尝试将我的对象转换为XML,以便将该文件保存到SkyDrive。我尝试过很多例子,但运气不好。有了这个密码,我 public void ConvertObjectToXmlString() { System.IO.MemoryStream ms = new System.IO.MemoryStream(); System.Xml.Serialization.XmlSerializer xs = new S
public void ConvertObjectToXmlString()
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(App.ViewModel.vehicleItemsCollection.GetType());
System.Xml.XmlWriter xtw = System.Xml.XmlWriter.Create(ms);
//System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter(ms, System.Text.Encoding.UTF8);
xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]);
MessageBox.Show(xtw.ToString());
}
错误在这一行:xs.Serialize(xtw,App.ViewModel.vehicleItemsCollection[0])代码>
我有一个集合,在我的测试中只有一个项目。然而,我可以想象,当我最终发布这段代码时,我不会设置索引[0]
错误状态为:
生成XML文档时出错
当我进一步查看错误消息时,我会看到以下内容:
无法将OilChangeApplication.vehicle类型的对象分配给System.Collections.ObjectModel.ObservableCollection`1[[OilChangeApplication.vehicle,OilChangeApplication,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]类型的对象。
vehicleItemsCollection是一个车辆的集合。。。我需要做些什么才能得到一些XML,这样我就可以上传它了?我猜你正在序列化收集的项目。要序列化所有需要传递的集合,请执行以下操作:
xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection);
澄清。据此:
XmlSerializer(App.ViewModel.vehicleItemsCollection.GetType());
指定序列化程序可以序列化以下类型的对象:
ObservableCollection<OilChangeApplication.vehicle>
现在,您可以仅序列化一个对象:
xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]);
我猜您正在序列化集合的项。要序列化所有需要传递的集合,请执行以下操作:
xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection);
澄清。据此:
XmlSerializer(App.ViewModel.vehicleItemsCollection.GetType());
指定序列化程序可以序列化以下类型的对象:
ObservableCollection<OilChangeApplication.vehicle>
现在,您可以仅序列化一个对象:
xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]);
这个错误看起来非常明显,只是从编译器的角度稍微翻译了一下:
无法将类型为“OilChangeApplication.vehicle”的对象分配给类型为“OilChangeCollection”的对象
这意味着您对集合的索引导致了错误,如下所示:
xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]);
因为没有像您在本部分中告诉序列化程序的那样传递ObservableCollection
:newXMLSerializer(App.ViewModel.vehicleItemsCollection.GetType())代码>,您正在传递模型类的实例
因此,您可以删除[0]
或更改传递给序列化程序的类型,错误将消失
xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection);
或
这个错误看起来非常明显,只是从编译器的角度稍微翻译了一下:
无法将类型为“OilChangeApplication.vehicle”的对象分配给类型为“OilChangeCollection”的对象
这意味着您对集合的索引导致了错误,如下所示:
xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]);
因为没有像您在本部分中告诉序列化程序的那样传递ObservableCollection
:newXMLSerializer(App.ViewModel.vehicleItemsCollection.GetType())代码>,您正在传递模型类的实例
因此,您可以删除[0]
或更改传递给序列化程序的类型,错误将消失
xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection);
或
您的车型是什么样子的?如果内存可用,则需要在模型中做一点元数据标记,以便序列化程序知道如何处理对象类型。是否引用属性?现在它没有了。@Dillie-O我想你说的是在模型类定义中添加[XmlSerializable]
(又称XmlSerializableAttribute)。这很有用,但不是导致此错误的原因。@jv42-DOH!你说得对。谢谢你的关注。你的汽车项目模型是什么样子的?如果内存可用,则需要在模型中做一点元数据标记,以便序列化程序知道如何处理对象类型。是否引用属性?现在它没有了。@Dillie-O我想你说的是在模型类定义中添加[XmlSerializable]
(又称XmlSerializableAttribute)。这很有用,但不是导致此错误的原因。@jv42-DOH!你说得对。谢谢你的帮助。