如何在C#中将XML子元素添加到简单数据类型

1 .net c# xml xml-serialization

我正在尝试将简单数据类型序列化为XML,但是以特定方式来满足现有API.(假设必须以这种方式形成所需的XML)

这是所需的XML:

<foo>
<value>derp</value>
</foo>
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望在课堂上代表这一点

String foo;
Run Code Online (Sandbox Code Playgroud)

我所知道的唯一两个选择是

  1. 简单的序列化,当然只是导致
    <foo>derp</foo>
  1. 创建一个Foo类,它创建所需的XML,但强制用户键入
    myFoo.Value = "derp";

而不是更好的

foo = "derp";

有没有办法在类中使用简单的字符串,但用<value>子元素表示它?

Kir*_*huk 5

使用此实现:

[XmlRoot("foo")]
public class Foo
{
    [XmlElement("value")]
    public string Value { get; set; }

    public static implicit operator Foo(string s)
    {
        return new Foo { Value = s };
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

private static void Main()
{
    Foo foo = "abc";

    var ns = new XmlSerializerNamespaces();
    ns.Add(string.Empty, string.Empty);

    var serialzier = new XmlSerializer(typeof(Foo));

    using (var writer = new StringWriter())
    {
        serialzier.Serialize(writer, foo, ns);

        Console.WriteLine(writer.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

<?xml version="1.0" encoding="utf-16"?>
<foo>
  <value>abc</value>
</foo>
Run Code Online (Sandbox Code Playgroud)