次の XML ファイルがあります。
<Root>
<Document>
<Id>d639a54f-baca-11e1-8067-001fd09b1dfd</Id>
<Balance>-24145</Balance>
</Document>
<Document>
<Id>e3b3b4cd-bb8e-11e1-8067-001fd09b1dfd</Id>
<Balance>0.28</Balance>
</Document>
</Root>
このクラスに逆シリアル化します。
[XmlRoot("Root", IsNullable = false)]
public class DocBalanceCollection
{
[XmlElement("Document")]
public List<DocBalanceItem> DocsBalanceItems = new List<DocBalanceItem>();
}
どこにDocBalanceItem
ある:
public class DocBalanceItem
{
[XmlElement("Id")]
public Guid DocId { get; set; }
[XmlElement("Balance")]
public decimal? BalanceAmount { get; set; }
}
これが私の逆シリアル化方法です:
public DocBalanceCollection DeserializeDocBalances(string filePath)
{
var docBalanceCollection = new DocBalanceCollection();
if (File.Exists(filePath))
{
var serializer = new XmlSerializer(docBalanceCollection.GetType());
TextReader reader = new StreamReader(filePath);
docBalanceCollection = (DocBalanceCollection)serializer.Deserialize(reader);
reader.Close();
}
return docBalanceCollection;
}
すべて正常に動作しますが、多くの XML ファイルがあります。Item
クラスを書くだけでなくItemCollection
、それぞれのクラスを書かなければなりません。またDeserializeItems
、それぞれにメソッドを実装する必要があります。
ItemCollection
クラスを作成せずに XML ファイルをデシリアライズできますか? そして、それらすべてを逆シリアル化する単一のジェネリック メソッドを記述できますか?
頭に浮かぶ唯一の解決策は、これらすべてのクラスのインターフェースを作成することです。何か案は?