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

私の推測では、コレクションのアイテムをシリアル化しています。すべてのコレクションをシリアル化するには、それを渡す必要があります。

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

明確にするために。これで:

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

シリアライザーが次のタイプのオブジェクトをシリアライズできることを指定します。

ObservableCollection<OilChangeApplication.vehicle>

OilChangeApplication.vehicleそして、インスタンスのコレクションではなく、インスタンスをシリアル化するために渡しOilChangeApplication.vehicleます。


また、1つのオブジェクトだけをシリアル化する場合は、シリアル化することをシリアライザーに「通知」する必要がありますOilChangeApplication.vehicle

XmlSerializer(typeof(OilChangeApplication.vehicle));

これで、1つのオブジェクトだけをシリアル化できます。

xs.Serialize(xtw, App.ViewModel.vehicleItemsCollection[0]);
于 2012-05-07T12:56:44.853 に答える
3

エラーは、コンパイラの話から少し翻訳すると非常に明白に見え ます。タイプのオブジェクトをタイプのオブジェクトに割り当てることはできません。OilChangeApplication.vehicleObservableCollection<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 に答える