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

时间:2011-10-19 14:11:15

标签: c# .net xml xml-serialization

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

这是所需的XML:

<foo>
<value>derp</value>
</foo>

我希望在课堂上将其表示为

String foo;

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

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

      代替优先

      foo = "derp";

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

1 个答案:

答案 0 :(得分: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 };
    }
}

用法:

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());
    }
}

输出:

<?xml version="1.0" encoding="utf-16"?>
<foo>
  <value>abc</value>
</foo>