XmlSerializerとXmlWriter/XMLReaderを使用して、XML設定ファイルとの間でオブジェクトをシリアル化しようとしています。最も単純な形式で指定されたXMLノードとの間でオブジェクトを直列化/逆シリアル化する方法
これはかなり簡単です:
XmlSerializer oSerializer = new XmlSerializer(typeof(mySettings), new XmlRootAttribute("Settings"));
using (XmlWriter oXmlWriter = XmlWriter.Create(myFilePath)
oSerializer.Serialize(oXmlWriter, mySettings);
と
XmlSerializer oSerializer = new XmlSerializer(typeof(mySettings), new XmlRootAttribute("Settings"));
using (XmlReader oXmlReader = XmlReader.Create(myFilePath)
oSerializer.Serialize(oXmlWriter, mySettings);
が生成し、読み込み(簡単な例):
<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Token>NC05MWY4NmJkOGRl</Token>
<TokenExpiry>2017-11-01</TokenExpiry>
<TokenType>bearer</TokenType>
</Settings>
しかし、私がしようとしています異なるノードにある同じオブジェクトのさまざまなバージョンを保存します(読み込みます)。
<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ThisSetting>
<Token>NC05MWY4NmJkOGRl</Token>
<TokenExpiry>2017-11-01</TokenExpiry>
<TokenType>bearer</TokenType>
</ThisSetting>
<ThatSetting>
<Token>eyJ0eXAiOiJKV1Qi</Token>
<TokenExpiry>2017-11-05</TokenExpiry>
<TokenType>token</TokenType>
</ThatSetting>
</Settings>
注:オブジェクトの同じクラスが書かれているように、XML構造は、ノード間で同一です。
手動で記述することができますThisSettingおよびThatSetting;それらはオブジェクト定義の一部ではありません。ファイルが最初に存在しないか、またはThatSetting ThisSetting ThisSetting(ファイル内の順序は関係ありません)を保存すると、の場合にのみ、ファイルが最初に存在しない状況を処理する必要があるため、ノードを追加する必要があります。 (私は単純に複数のファイルを持つことができますが、それはかなり控えめなものです)
これを行うには誰も簡単できれいな方法を提供できますか?明らかに、私は手作業でファイルの書き込みと読み取りを解析することができますが、それは必要ではないようです。私は、プロパティを囲むようThisSettingとThatSettingを提供するオブジェクトをラップすることができ、しかしThisSettingとThatSetting名前と番号に変えることができ、経時的に変化することができる製品名に応じて動的です。
アイデア?明白な何かを逃したことがありますか?
開始タグと終了タグは、同様のことが書かれていないでしょうか? – Nikolaus
ファイル(XML)またはデータベースに保存しますか? – Nikolaus
@Nikolaus Typo、申し訳ありません。一定。投稿ごとにファイル(例:settings.xml)。 – SteveCinq