10

次の 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 ファイルをデシリアライズできますか? そして、それらすべてを逆シリアル化する単一のジェネリック メソッドを記述できますか?

頭に浮かぶ唯一の解決策は、これらすべてのクラスのインターフェースを作成することです。何か案は?

4

2 に答える 2

1

文字列化可能なオブジェクトは、次のメソッドで逆シリアル化できます。

public static T genericDeserializeSingleObjFromXML<T>(T value, string XmalfileStorageFullPath)
        {             
            T Tvalue = default(T);
            try
            {
                XmlSerializer deserializer = new XmlSerializer(typeof(T));
                TextReader textReader = new StreamReader(XmalfileStorageFullPath);
                Tvalue = (T)deserializer.Deserialize(textReader);
                textReader.Close();

            }
            catch (Exception ex)
            {                   
            System.Windows.Forms.MessageBox.Show("serialization Error : " + ex.Message);                
            }
            return Tvalue;
        }

このメソッドを使用するには、xml ファイルでオブジェクトをシリアル化する必要があります。呼び出し方法は次のとおりです。

XmlSerialization.genericDeserializeSingleObjFromXML(new ObjectName(), "full path of the XML file");
于 2014-09-28T15:38:56.353 に答える