2011-10-19 13 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> 
相關問題