自定义为 C# 实例生成的 xml

本文关键字:xml 实例 自定义 | 更新日期: 2023-09-27 17:57:03

我在c#中使用XmlSerializer将类实例序列化为xml。默认情况下,如果我序列化以下类的实例:

public class XmlTest
{
    public bool b1;
}

布尔字段表示为 <b1>false</b1> 我有具体要求,布尔字段的值表示为<false><true>中的元素,而不是文本内容。我对枚举字段也有类似的要求。

我尝试使用控制 XML 序列化的属性,但找不到满足我要求的属性。我对 c# 相当陌生,想知道实现这一目标的最佳方法。

自定义为 C# 实例生成的 xml

不能使用 XML 序列化程序执行此操作。您可以改用 LINQ to XML:

public XElement Serialize(XmlTest t){
    return new XElement("XmlTest",
                        new XElement(t.b1 ? "true" : "false"));
}

关于在代码生成设置中使用 LINQ to XML 的一个提示:XElement有一个看起来非常简单的构造函数:

public XElement(
  XName name,
  Object content
)

但这个content参数几乎可以是任何东西。这包括

  • 实现ToString的任何类型
  • 实现IEnumerable的任何类型

因此,例如:

XElement xmlTree2 = new XElement("Root",
    from el in xmlTree1.Elements()
    where((int)el >= 3 && (int)el <= 5)
    select el
);

可以生产

<Root>
  <Child3>3</Child3>
  <Child4>4</Child4>
  <Child5>5</Child5>
</Root>