3

XML ドキュメントに格納するオブジェクトのリストがあります。データの保存と取得にシリアライズ/デシリアライズを使用しています。新しいオブジェクトを保存する必要がある場合は、xml 全体をリストに逆シリアル化し、新しいオブジェクトをこのリストに追加し、再度シリアル化して xml に保存します。

私の質問は、これは新しいオブジェクトを追加する正しい方法ですか、それとも新しいオブジェクトを追加する他の方法はありますか? データの逆シリアル化中にエラーが発生する可能性があるため、タグを手動で作成して追加したくありません。

これは私が今使っているものです:

 public static T readXml<T>(string fileName)
    {
        T tempList ;
        XmlSerializer deserializer = new XmlSerializer(typeof(T));
        TextReader textReader = new StreamReader(fileName);
        tempList = (T)deserializer.Deserialize(textReader);
        textReader.Close();

        return tempList;
     }

    public static void writeXml<T>(T tempList,string fileName)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        TextWriter textWriter = new StreamWriter(fileName);
        serializer.Serialize(textWriter, tempList);
        textWriter.Close();
    }
4

1 に答える 1

1

基本的に、はい、シリアル化は正しい方法です。オブジェクトを「手動」で書き出すよりも堅牢で、適度な柔軟性があり、作業がはるかに少なくて済みます (また保守も容易です)。

ただし、シリアル化するオブジェクト グラフが大きく、プロセスをより効率的にしたい場合は、新しいオブジェクトのみをシリアル化し、それを既存の Xml に追加または挿入することが可能かどうかを検討する必要があります。 .

新しいノードを挿入または追加するには、既存の xml を XmlDocument オブジェクトに読み込み、新しいコンテンツを追加するノードを見つけて、新しいノードを追加する必要があります。例えば:

XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("MyXml.xml");
XmlDocument newDoc = new XmlDocument();
newDoc.Load("MyNewObject.xml");

//Use Xpath to specify node
XmlNode insertNode = xmldoc.SelectSingleNode("parentElement/myElement");
XmlNode newObj = newDoc.SelectSingleNode("rootElement");

insertNode.AppendChild(newObj);

xmldoc.Save("MyXml.xml"); 

ファイルからの xml の取得は、単に例を示すためのものです。現実の世界では、何らかの形式のストリームまたは xml リーダーで既に xml を取得している場合や、データベースから取得する必要がある場合があります。

于 2013-06-25T08:52:49.820 に答える