XML Serialization C#,重复节点

时间:2016-03-15 12:33:38

标签: c# asp.net xml asp.net-mvc serialization

这是我的班级结构

Collections.swap(arrayList,2,6);

它正在生成的XML是

 [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有重复的 GROUP 群组标记,我试图删除它,我已经检查了StackOverflow中提到的其他答案,但它们在我的情况下不起作用。请帮助。

我正在使用C#的XMLSerialization

HimBromBeere的答案是生成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>

我不希望<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> 标记在那里

3 个答案:

答案 0 :(得分:3)

您可以从In [26]: list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] In [27]: list1[1::2] = [x+1 for x in list1[1::2]] In [28]: list1 Out[28]: [1, 3, 3, 5, 5, 7, 7, 9, 9, 11] 的成员定义中省略[XmlArray(ElementName = "GROUP")]XmlArrayItem,并将public Seller[] Sellers { get; set; } - 属性添加到数组的定义中:

XmlElement

您还可以将此属性添加到现有public class OrderXML { [XmlElement("GROUP")] public Group[] GroupList { get; set; } } public class Group { [XmlElement(ElementName = "SELLER", Type = typeof(Seller))] public Seller[] Sellers { get; set; } } 的{​​{1}} - 类成员OrderedXML个实例中。 这将使层次结构变平,使得数组立即位于Groups - 标记内。

答案 1 :(得分:1)

我认为为了做到这一点,你需要在Group类中指定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

答案 2 :(得分: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; }

    }