c# - 如何通过调用 XmlSerializer.Serialize 创建 XmlNode?

标签 c# xml

我正在使用一个类库,它在 .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 类,但现在链接已断开。有谁知道有其他地方可以上这门课吗?

最佳答案

因此您需要让您的类包含自定义配置信息,然后将该类序列化为 XML,然后将该序列化的 XML 转换为 XML 节点:对吗?

您能否将 XMLSerializer 创建的字符串包装在它自己的 XML 标记中?

XmlSerializer xs = new XmlSerializer(typeof(MyConfig));
StringWriter xout = new StringWriter();
xs.Serialize(xout, myConfig);
XmlDocument x = new XmlDocument();
x.LoadXml("<myConfig>" + xout.ToString() + "</myConfig>");

现在 x 是一个包含一个元素“”的 XmlDocument,其中包含您的序列化自定义配置。

这就是您要找的吗?

关于c# - 如何通过调用 XmlSerializer.Serialize 创建 XmlNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46282/

相关文章:

c# - 当使用此类时,想要强制执行类的特定方法执行顺序。是否存在针对此的设计模式?

c# - 如何检查对象实现接口(interface)

php - 将美国置于 phpfox 注册页面上国家列表的顶部

java - 我的实体 OOP 模型正确吗?

iphone - 如何使用苹果的 KML 查看器示例代码显示多边形

javascript - 如何使用 JavaScript 解析附加的 XML 代码?

c# - 像 ajax 标记完成一样工作的 Winforms 控件

c# - MVVM:加载大数据记录

c# - ASP NET Boilerplate > 使用 swagger 代码生成工具 (nswag) 生成 C# swagger 客户端不起作用

c - 使用 libxml2 解析 xml 并使用 C 获取命名字符串值