2016-03-15 82 views
0

這是我的階級結構XML序列化C#,重複的節點

[Serializable] 
public class OrderXML 
{ 
    [XmlArray("GROUPLIST")] 
    public Group[] GroupList { get; set; } 
} 

[Serializable] 
public class Group 
{ 
    [XmlArray(ElementName = "GROUP")] 
    [XmlArrayItem(ElementName = "SELLER", Type = typeof(Seller))] 
    public Seller[] Sellers { get; set; } 
} 

它生成的XML是

<GROUPLIST> 
    <Group> 
    <GROUP> 
     <SELLER SELLERREF="1"> 
     ... 
     </SELLER> 
     <SELLER SELLERREF="2"> 
     ... 
     </SELLER> 
    </GROUP> 
    </Group> 
    <Group> 
    <GROUP> 
     <SELLER SELLERREF="1"> 
     ... 
     </SELLER> 
     <SELLER SELLERREF="2"> 
     ... 
     </SELLER> 
    </GROUP> 
    </Group> 
</GROUPLIST> 

的XML有重複GROUP集團標籤,我想爲了消除這一點,我已經檢查了StackOverflow中提到的其他答案,但他們不適用於我的情況。請幫助。

我使用的C#

XMLSerialization通過HimBromBeere答案是生成XML

<GROUPLIST> 
     <Group> 
     <Sellers> 
      <SELLER SELLERREF="1"> 
      ... 
      </SELLER> 
      <SELLER SELLERREF="2"> 
      ... 
      </SELLER> 
     </Sellers> 
     </Group> 
     <Group> 
     <Sellers> 
      <SELLER SELLERREF="1"> 
      ... 
      </SELLER> 
      <SELLER SELLERREF="2"> 
      ... 
      </SELLER> 
     </Sellers> 
     </Group> 
    </GROUPLIST> 

我不想<Sellers>標籤有

+0

是的,我只想在那裏有一個組標記,而不是組1 –

回答

0

感謝@Lesmian和@HimBromBree的回答,我擺脫了GROUP重複標記,然後添加了GROUPLIST標記,我在中間添加了另一個類。謝謝所有

public class OrderXML 
    { 
     [XmlElement(ElementName = "GROUPLIST")] 
     public GroupList GroupList { get; set; } 
    } 
    public class GroupList 
    { 
     [XmlElement(ElementName = "GROUP", Type = typeof(Group))] 
     public Group[] Groups { get; set; } 

    } 
3

可以省略從[XmlArray(ElementName = "GROUP")]XmlArrayItem您的成員定義public Seller[] Sellers { get; set; }並將XmlElement -attribute添加到數組的定義中:

public class OrderXML 
{ 
    [XmlElement("GROUP")] 
    public Group[] GroupList { get; set; } 
} 

public class Group 
{ 
    [XmlElement(ElementName = "SELLER", Type = typeof(Seller))] 
    public Seller[] Sellers { get; set; } 
} 

還可以將此屬性添加到您的OrderedXML -class成員Groups instzead現有XmlArrayItem的。 這將以這種方式使層次結構扁平化,使數組立即在<Group> -tag內出現。

+0

剛剛表明......好的答案。 –

+0

' <賣方SELLERREF = 「1」> .. <賣方SELLERREF = 「2」> .. <賣方SELLERREF =「1 「> .. .. ' 它添加** **賣家到位,我只是想GROUPLIST集團和賣方 –

+0

HimBromBeere它正在改變組標籤,賣家,我想這個標記被完全刪除,任何建議 –

1

我認爲,爲了做到這一點,你需要指定XMLELEMENT屬性而不是xmlarray在組類:

[Serializable] 
public class OrderXML 
{ 
    [XmlArray("GROUPLIST")] 
    public Group[] GroupList { get; set; } 
} 

[Serializable] 
public class Group 
{ 
    [XmlElement("SELLER", Type = typeof(Seller))] 
    public Seller[] Sellers { get; set; } 
} 

這應該刪除其他組的標籤。在這裏你可以找到關於它的詳細信息:http://blogs.msdn.com/b/youssefm/archive/2009/06/12/customizing-the-xml-for-collections-with-xmlserializer-and-datacontractserializer.aspx

+0

您的回答爲添加了2個,沒有工作 –

+0

@UmairManzoor嗨,試試我的更新回答。它現在應該工作。 – Lesmian

+0

確實有幫助,但我不得不在其間添加另一個班級,謝謝。張貼在 –