.xml で構成の一部を表すクラス ライブラリを使用しています。構成は、 を使用して読み込まれますXmlSerializer。幸いなことに、.xml を表すクラスはXmlAnyElement、元のクラス ライブラリを変更せずに独自の目的のために構成データを拡張できる at 属性を使用します。
<?xml version="1.0" encoding="utf-8"?>
<Config>
<data>This is some data</data>
<MyConfig>
<data>This is my data</data>
</MyConfig>
</Config>
これは、逆シリアル化に適しています。クラス ライブラリが.xmlを通常どおり逆シリアル化できるようにすることができXmlSerializerます。XmlNodeReaderXmlNode
public class Config
{
[XmlElement]
public string data;
[XmlAnyElement]
public XmlNode element;
}
public class MyConfig
{
[XmlElement]
public string data;
}
class Program
{
static void Main(string[] args)
{
using (Stream fs = new FileStream(@"c:\temp\xmltest.xml", FileMode.Open))
{
XmlSerializer xser1 = new XmlSerializer(typeof(Config));
Config config = (Config)xser1.Deserialize(fs);
if (config.element != null)
{
XmlSerializer xser2 = new XmlSerializer(typeof(MyConfig));
MyConfig myConfig = (MyConfig)xser2.Deserialize(new XmlNodeReader(config.element));
}
}
}
ユーザーがクラス ライブラリ構成と独自の構成の両方を含む新しい構成ファイルを生成できるようにするユーティリティを作成する必要があるため、.xml ファイルから読み取られなかった新しいオブジェクトが作成されます。問題は、データをシリアル化して .xml に戻すにはどうすればよいかということです。
XmlSerializer.Serializeクラス ライブラリ構成で同じメソッドを呼び出す前に、最初に自分のデータを呼び出す必要があることに気付きました。XmlNodeただし、これには私のデータがafter 呼び出しで表される必要がありSerializeます。XmlNodeを使用してオブジェクトをシリアル化する最良の方法は何XmlSerializerですか?
ありがとう、
-ケビン
ところでXmlNodeWriter-- Chris Lovett によって書かれたクラスが Microsoft から一度に入手可能だったようですが、リンクは現在壊れています。このクラスを取得する別の場所を知っている人はいますか?