0

使用 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 =中性,PublicKeyToken=null]]。

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

4

2 回答 2

3

编译器稍微翻译一下,错误似乎非常明确: Cannot assign object of type OilChangeApplication.vehicleto an object of type 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());
于 2012-05-07T13:01:34.720 回答
3

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

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]);
于 2012-05-07T12:56:44.853 回答