繁体   English   中英

尝试将对象序列化为XML

[英]Trying to serialize object to XML

使用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]]。

vehicleItemsCollection是车辆的集合...我需要做些什么才能获取一些XML,以便可以上传它?

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

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

澄清。 这样:

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

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

ObservableCollection<OilChangeApplication.vehicle>

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


而且,如果您只想序列化一个对象,则需要“告诉”序列化程序,您将序列化OilChangeApplication.vehicle

XmlSerializer(typeof(OilChangeApplication.vehicle));

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

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

从编译器的角度稍作翻译,该错误似乎非常明显: 无法将类型为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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM