2012-05-07 3 views
0

にオブジェクトをシリアル化しようとすると:はWP7 & C#を使用してXML

私は、その後のSkyDriveにそのファイルを保存することができますので、XMLに私のオブジェクトを変換しようとしています。私はたくさんの例を追ってみたことがあります。このコードで、私は

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を取得するために何をする必要がありますか?

+0

あなたvehicleItemモデルはどのようなものが見えますか?メモリが機能する場合は、シリアライザがオブジェクトの型をどのように扱うかを知るために、モデルに少しのメタデータマークアップを行う必要があります。 –

+0

属性を参照していますか?今はそれがありません。 – webdad3

+0

@ Dillie-Oモデルクラスの定義に '[XmlSerializable]'(別名XmlSerializableAttribute)を追加することを話していると思います。これは便利ですが、このエラーの原因ではありません。 – jv42

答えて

3

エラーがコンパイラ話すからわずかな翻訳に非常に明白なようだ: はタイプのオブジェクトを割り当てることができません。をタイプ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()); 
3

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

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]); 
+0

はい、エラーのようです。 –

関連する問題