2011-10-19 12 views
1

我想将一个简单的数据类型序列化为XML,但以特定的方式来满足现有的API。 (假设必须以这种方式来形成所期望的XML)如何将XML子元素添加到C#中的简单数据类型

这里是所期望的XML:

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

我将理想像在一个类来表示这个刚刚

String foo; 

的我只知道两个选项是

  1. 简单的序列化,这当然只是导致
 
    <foo>derp</foo> 
  1. 创建Foo类,创建期望的XML,但迫使用户键入
 
    myFoo.Value = "derp"; 

代替优选

foo = "derp";

是否有任何方式来在课堂上有简单的字符串,但代表它与<value>子元素?

+0

你为什么要序列它以这种方式? – Fischermaen

+0

以满足现有的API(已编辑的原始问题) – Whisker

+0

你可以不实现['IXmlSerializable'](http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx)包含'foo'的类,以完全控制序列化? –

回答

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> 
相关问题