2011-10-19 14 views
1

単純なデータ型をXMLにシリアル化しようとしていますが、既存のAPIを満たす特定の方法です。私は理想的にちょうどC#で単純なデータ型にXMLサブ要素を追加する方法

String foo; 

としてクラスでこれを表現したいと思います

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

:ここ

が必要なXMLである(希望XMLは、このように形成されなければならないと仮定)私が知っている唯一の2つのオプションは、

  1. です。単純なシリアライズはもちろん、
  2. につながります所望のXMLを作成し、その代わりに好ましい
    foo = "derp";

 
    myFoo.Value = "derp"; 

を入力することをユーザに強制するのFooクラスを作成

 
    <foo>derp</foo> 
  1. する方法はありますクラスには単純な文字列がありますが、それはサブ要素<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> 
関連する問題