2016-03-15 83 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

确实有帮助,但我不得不在其间添加另一个班级,谢谢。张贴在 –