【问题标题】:How to add an XML sub-element to a simple data type in C#如何在 C# 中将 XML 子元素添加到简单数据类型
【发布时间】:2011-10-19 14:11:15
【问题描述】:

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

这是所需的 XML:

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

理想情况下,我希望在一个类中将其表示为

String foo;

我知道的仅有的两个选项是

  1. 简单的序列化,这当然会导致
derp
  1. 创建一个 Foo 类,该类创建所需的 XML,但强制用户键入
myFoo.Value = "derp";

而不是更可取的

foo = "derp";

有没有办法在类中拥有简单的字符串,但用&lt;value&gt; 子元素表示它?

【问题讨论】:

  • 为什么要这样序列化呢?
  • 满足现有 API(已编辑的原始问题)
  • 你不能在包含foo的类上实现IXmlSerializable来完全控制序列化吗?

标签: c# .net xml xml-serialization


【解决方案1】:

使用这个实现:

[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>

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多