私は、XMLシリアル/デシリアライズしたいくつかの汎用クラスを書くために物事とtyringちょっと新しい人です。 XmlSerializer.Deserialize(typeof(T))
を使用している間、私はTオブジェクトが私のXMLの親要素の名前と同じ名前でなければならないことを認識しています。ここで私はすなわちFoodPlaces.xmlこの例で使用しているXML文書は次のとおりです。C#:XMLデシリアライズ制限
<foodplaces>
<foodplace>
<name> The Indian Restaurant</name>
<week> 47 </week>
<monday>
<food> Pasta </food>
<food> chineese food</food>
<food> veg food </food>
</monday>
<tuesday>
<food> Indian food</food>
<food> Veg food </food>
</tuesday>
</foodplace>
<foodplace>
<name> Restauran Italian </name>
<week> 47 </week>
<monday>
<food> Pizza </food>
<food> Checken </food>
<food> sallad </food>
</monday>
<tuesday>
<food> Fish </food>
<food> ris </food>
<food> Biff </food>
<food> Checken </food>
</tuesday>
</foodplace>
</foodplaces>
そして、これは私がこのXMLをデシリアライズしていますか、次のとおりです。
var serializer = new XmlSerializer(typeof(foodplaces));
var fs = new FileStream(@"D:\FoodPlaces.xml", FileMode.Open);
var reader = XmlReader.Create(fs);
var fp = (foodplaces)serializer.Deserialize(reader);
fs.Close();
これは絶対に正常に動作しますので、私のストレージクラス名は、XMLファイルの最上位/親要素である「foodplaces」です。私はMyFoodPlacesに私のストレージ・クラスの名前を変更しようとすると
、これは起こった:
*System.InvalidOperationException was unhandled
HResult=-2146233079
Message=There is an error in XML document (1, 2).
Source=System.Xml
//Skipping stack trace:
InnerException:
HResult=-2146233079
**Message=<foodplaces xmlns=''> was not expected.**
Source=Microsoft.GeneratedCode*
を、私は戻ってXML内の最上位/親要素である「foodplaces」に名前を変更した場合にこの問題は修正されるだろう。
質問:
1.このXMLデータを別の名前のe..g MyfoodPlacesの別のクラスに保存するとどうなりますか?
2. LinQを使用して解決策はありますか?
ありがとうございました。私はあなたの返事を持っていることを望んでいた:) –