2009-08-05 25 views
2

配列をシリアル化しようとしていて、配列に属性を添付したいとします。例えば、私が欲しいの出力は次のようになります。シリアル化にXML属性を入力

<ArrayOfThingie version="1.0"> 
    <Thingie> 
    <name>one</name> 
    </Thingie> 
    <Thingie> 
    <name>two</name> 
    </Thingie> 
</ArrayOfThingie> 

これは単にプリミティブ配列であるので、私はちょうどその連載では、配列自体の属性を定義する必要はありません。シリアライゼーションに属性を挿入する方法はありますか?

答えて

2

あなただけのシリアル化のためArrayOfThingieのラッパーを作成することができます。

public class Thingie 
    { 
     [XmlElement("name")] 
     public string Name { get; set; } 
    } 

    [XmlRoot] 
    public class ArrayOfThingie 
    { 
     [XmlAttribute("version")] 
     public string Version { get; set; } 
     [XmlElement("Thingie")] 
     public Thingie[] Thingies { get; set; } 
    } 

    static void Main(string[] args) 
    { 
     Thingie[] thingies = new[] { new Thingie { Name = "one" }, new Thingie { Name = "two" } }; 

     ArrayOfThingie at = new ArrayOfThingie { Thingies = thingies, Version = "1.0" }; 
     XmlSerializer serializer = new XmlSerializer(typeof(ArrayOfThingie)); 
     StringWriter writer = new StringWriter(); 
     serializer.Serialize(writer, at); 

     Console.WriteLine(writer.ToString()); 
    } 
+0

ニース。私はXmlSerializer名前空間の仕事として近づいていました。それには、私が欲しいものをほとんど行う方法がたくさんありますが、そうではありません。これははるかに簡単です。ありがとう! – Jerry

0

ハックのビットは、配列をXMLにシリアル化し、保存する前にシリアル化されたXMLを変更することです。 Arrayがクラスのプロパティであると仮定すると、クリーナーはAdd an attribute to a serialized XML nodeになります。