2010-12-14 21 views
2

予想されるXML出力:上記のXMLドキュメントを取得するにはのXmlSerializer - 異なる属性を持つ同じ要素

<add> 
<doc> 
    <field name="id">1</field> 
    <field name="Myname">MyName1</field1> 
</doc> 
<doc> 
    <field name="id">2</field> 
    <field name="Myname">MyName2</field> 
</doc> 
<doc> 
    <field name="id">3</field> 
    <field name="Myname">MyName3</field> 
</doc> 
</add> 

、私は次のクラス

public class doc 
{ 
    [XmlElement("field")] 
    public ID Id 
    { 
     get; 
     set; 
    } 
    [XmlElement("field2")] 
    public Name Myname 
    { 
     get; 
     set; 
    } 
} 

Nameクラスが

public class Name 
{ 
    [XmlText] 
    public string Namevalue 
    { 
     get; 
     set; 
    } 
    [XmlAttribute("name")] 
    public string Myname 
    { 
     get; 
     set; 
    } 
} 
になりますように設計しました

XmlSerializerコード:

XmlSerializer serializer = new XmlSerializer(typeof(List<doc>), new XmlRootAttribute("add")); 

これは私が私がドキュメントクラスにFIELD2としてフィールドを変更する必要があります知っているフィールドである必要があり、次の出力ここでフィールド2

<add> 
<doc> 
    <field name="id">1</field> 
    <field2 name="Myname">MyName1</field2> 
</doc> 
<doc> 
    <field name="id">2</field> 
    <field2 name="Myname">MyName2</field2> 
</doc> 
<doc> 
    <field name="id">3</field> 
    <field2 name="Myname">MyName3</field2> 
</doc> 
</add> 

を与えますそれは間違っています。

予想される出力を得るためにクラスをどのように設計する必要がありますか?

編集: IDクラスのような、独自の属性を持つ名前のクラスのようになります

+1

IDクラスとは何ですか? –

+0

@Saeed pl look at edit –

+0

興味深い質問です。 DHTMLXグリッドで使用するXMLデータをフォーマットするには、この情報が必要です。 –

答えて

4

何か:次に

[XmlType("add"), XmlRoot("add")] 
public class WhateverAddIs { 
    private readonly List<Document> docs = new List<Document>(); 
    [XmlElement("doc")] 
    public List<Document> Documents { get { return docs; } } 
} 
public class Document { 
    private readonly List<Field> fields = new List<Field>(); 
    [XmlElement("field")] 
    public List<Field> Fields { get { return fields; } } 
} 
public class Field { 
    [XmlAttribute("name")] 
    public string Name { get; set; } 
    [XmlText] 
    public string Value { get; set; } 
} 

class Program { 
    static void Main() { 
     var add = new WhateverAddIs { 
      Documents = { 
       new Document { 
        Fields = { 
         new Field { Name="id", Value ="1"}, 
         new Field { Name="Myname", Value ="Myname1"}, 
        }       
       }, new Document { 
        Fields = { 
         new Field { Name="id", Value ="2"}, 
         new Field { Name="Myname", Value ="Myname2"}, 
        } 
       }, new Document { 
        Fields = { 
         new Field { Name="id", Value ="3"}, 
         new Field { Name="Myname", Value ="Myname3"}, 
        } 
       } 
      } 
     }; 
     var ser = new XmlSerializer(add.GetType()); 
     ser.Serialize(Console.Out, add); 
    } 
} 
5

つのオプション

[XmlRoot("doc")] 
    public class Doc 
    { 
     [XmlElement("field",Order = 1)] 
     public Field Id 
     { 
      get; 
      set; 
     } 
     [XmlElement("field", Order = 2)] 
     public Field Name 
     { 
      get; 
      set; 
     } 
    } 

    [XmlRoot("doc")] 
    public class Field 
    { 
     [XmlText] 
     public string Value 
     { 
      get; 
      set; 
     } 

     [XmlAttribute("name")] 
     public string Name 
     { 
      get; 
      set; 
     } 
    } 
enter code here 

これは、指定された順序で要素を生成します。または配列を使用する

[XmlRoot("doc")] 
    public class Doc 
    { 
     [XmlArray("field")] 
     public Field[] Fields 
     { 
      get; 
      set; 
     } 
    } 
関連する問題