-1

次のコードでコンテンツをシリアル化する従来の方法を使用しています

private void SaveToXml(IdentifiableEntity IE)
{
    try
    {
        XmlSerializer serializer = new XmlSerializer(IE.GetType());
        TextWriter textWriter = new StreamWriter(IE.FilePath);
        serializer.Serialize(textWriter, IE);
        textWriter.Close();
    }
    catch (Exception e )
    {
        Console.WriteLine("erreur : "+ e);
    }
}

private T LoadFromXml<T>(string path)
{           
    XmlSerializer deserializer = new XmlSerializer(typeof(T));
    TextReader textReader = new StreamReader(path);

    T entity = (T)deserializer.Deserialize(textReader);
    textReader.Close();

    return entity;            
}

このアプローチはうまくいきますが、すべてのプロパティを公開する必要があり、時々プロパティにタグを付ける必要があるのは少し面倒です [XmlAttribute|XmlElement| XmlIgnore] であり、辞書を扱わないことです。

私の質問は: C# でオブジェクトをシリアル化するより良い方法はありますか?

4

1 に答える 1

0

まず、コードで「using」ブロックを使用することをお勧めします。(サンプルコード)

私の理解が正しければ、逆シリアル化/シリアル化操作中に使用するモデル クラスを構築するための迅速な方法を探しています。

すべての Xml ファイルは異なり、それらをシリアル化/逆シリアル化する一般的な方法がわかりません。ある時点で、属性または要素があるかどうか、またはいずれかの要素が null になる可能性があるかどうかなどを知る必要があります。

数行のサンプル XML ファイルが既にあると仮定すると、それがどのように見えるかの一般的なビューが得られます。

xsd (奇跡のツール) を使用することをお勧めします

xsd yourXMLFileName.xml
xsd yourXMLFileName.xsd \classes

このツールは、作業する XML ファイルのモデル クラスを毎回生成します。

簡単にシリアル化および逆シリアル化するよりも

逆シリアル化するには (XML のルート ノードを表す XXXX という名前のクラスを取得すると仮定します)

XmlSerializer ser = new XmlSerializer(typeof(XXXX));
XXXX yourVariable;
using (XmlReader reader = XmlReader.Create(@"C:\yyyyyy\yyyyyy\YourXmlFile.xml"))
{
   yourVariable= (XXXX) ser.Deserialize(reader);
}

シリアライズするには

var serializer = new XmlSerializer(typeof(XXXX));

using(var writer = new StreamWriter(@"C:\yyyyyy\yyyyyy\YourXmlFile.xml"))
{
    serializer.Serialize(writer, yourVariable);
}
于 2013-07-27T16:05:53.040 に答える