Я использую библиотеку классов, которая представляет некоторые ее конфигурации в .xml. Конфигурация считывается с использованием XmlSerializer
. К счастью, классы, представляющие файл .xml, используют атрибут XmlAnyElement
, который позволяет мне расширять данные конфигурации для моих собственных целей без изменения исходной библиотеки классов.
<?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
экземпляры с XmlNodeReader
против внутреннего XmlNode
.
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
после вызова Serialize
. Каков наилучший способ сериализации объекта в XmlNode
с использованием XmlSerializer
?
Спасибо
* 1023 Кевин *
btw-- Похоже, класс XmlNodeWriter
, написанный Крисом Ловеттом, был когда-то доступен от Microsoft, но теперь ссылки не работают. Кто-нибудь знает альтернативное место, чтобы получить этот класс?