2016-08-22 1 views
1

XMLシリアライザを使用してオブジェクトの状態を保存しようとしています。ここでは、プロパティCHAR1の値を取得し、名前CHAR1を持つノードに書き込むしようとしているxmlシリアライザを使用してオブジェクトの状態を保存します。プロパティやハードコードされた文字列からノード名を取得する方法をお勧めしますか?

Class Program 
{ 
    public string Char1 {get; set;} 
    public XMLNode Serialize (XmlDocument doc) 
    { 
     var node = document.CreateElement("Mod") 
     node.SetAttribute("Char1", Char1.ToString()); 
    } 
} 

:議論のためのようになり、オブジェクトを想定しています。

リフレクションを使用してChar1プロパティからノード名 "Char1"を派生させる方が良いでしょうか?しかし、これにより、プロパティー名が変更されたときにXML文書が頻繁に変更される可能性があります。

プロパティ名が変更され、文字列が更新されない場合、xmlドキュメントの値はそのフィールドのコンテキストと一致しません。

どのようなアプローチが望ましいですか?

xmlファイルの作成中にマジック文字列を避ける他の方法があるかどうかをご提案ください。

答えて

0

次のようにしたいと思います。シリアル化するすべてのデータを保持するクラスを作成します。次に、このようなXmlSerializerのインスタンスを作成します。

xmlDocument = new XmlDocument(); 

using (var stringWriter = new StringWriter(CultureInfo.InvariantCulture)) 
{ 
    using (var xmlTextWriter = new XmlTextWriter(stringWriter)) 
    { 
     xmlTextWriter.Formatting = Formatting.Intented; 
     var xmlSerializer = new XmlSerializer(myObject.GetType()); 
     xmlSerializer.Serialize(xmlTextWriter, myObject); 
     xmlDocument.PreserveWhitespace = true; 
     xmlDocument.LoadXml(stringWriter.ToString()); 
    } 
} 
+0

質問の文脈では、プロパティ自体からノード名を取得することを提案していますが、わかりましたか? – Versatile

関連する問題