【发布时间】:2010-09-07 23:00:46
【问题描述】:
我正在使用一个类库,它在 .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,然后再对类库配置调用相同的方法。但是,这要求我的数据在调用Serialize 后由XmlNode 表示。使用XmlSerializer 将对象序列化为XmlNode 的最佳方法是什么?
谢谢,
-凯文
顺便说一句-- 看起来 Chris Lovett 编写的 XmlNodeWriter 课程曾经可以从 Microsoft 获得,但现在链接已损坏。有谁知道其他可以上这门课的地方吗?
【问题讨论】: