尝试将对象序列化为 XML

本文关键字:XML 序列化 对象 | 更新日期: 2023-09-27 18:33:27

使用 WP7 & C#:

我正在尝试将我的对象转换为 XML,以便我可以将该文件保存到 SkyDrive。 我尝试过遵循许多示例,但没有太多运气。 有了这个代码,我是

 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]);我有一个集合,在我的测试中只有 1 个项目。 但是,我可以想象,当我最终发布此代码时,我不会设置索引 [0]。

错误指出:生成 XML 文档时出错

当我进一步进入错误消息时,我看到以下内容:无法将 OilChangeApplication.vehicle 类型的对象分配给类型为 System.Collections.ObjectModel.ObservableCollection'1[[OilChangeApplication.vehicle, OilChangeApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 类型的对象。

车辆

物品收藏是车辆...我需要做什么才能获取一些 XML,以便我可以上传它?

尝试将对象序列化为 XML

该错误似乎非常明确,并且从编译器语言中略有翻译:无法将 OilChangeApplication.vehicle 类型的对象分配给 ObservableCollection<OilChangeApplication.vehicle> 类型的对象。

这意味着您对集合的索引会导致错误,如下所示:

xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]);

因为不是像你在本部分中告诉序列化程序的那样传递ObservableCollection<...>new XmlSerializer(App.ViewModel.vehicleItemsCollection.GetType());,而是传递模型类的实例。

因此,您可以只删除[0]或更改要传递给序列化程序的类型,错误就会消失。

xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection);

 var xs = new System.Xml.Serialization.XmlSerializer(OilChangeApplication.vehicle.GetType());

我的猜测是你序列化了集合项。要序列化所有集合,您需要传递它:

xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection);

澄清一下。通过这个:

XmlSerializer(App.ViewModel.vehicleItemsCollection.GetType());

指定序列化程序可以序列化以下类型的对象:

ObservableCollection<OilChangeApplication.vehicle>

并且您传递序列化OilChangeApplication.vehicle实例而不是OilChangeApplication.vehicle实例的集合。


如果你只想序列化一个对象,那么你需要"告诉"序列化程序你将序列化OilChangeApplication.vehicle

XmlSerializer(typeof(OilChangeApplication.vehicle));

现在,您只能序列化一个对象:

xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]);