【问题标题】:XML Serialization C#, duplicate nodesXML序列化C#,重复节点
【发布时间】:2016-06-30 21:44:08
【问题描述】:

这是我的班级结构

 [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 有重复的 GROUPGroup 标签,我正在尝试删除它,我已经检查了 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>

我不想要&lt;Sellers&gt; 标签

【问题讨论】:

  • 是的,我只想在那里有一个 GROUP 标签,而不是 Group one

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


【解决方案1】:

感谢@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; }

    }

【讨论】:

    【解决方案2】:

    您可以从public Seller[] Sellers { get; set; } 的成员定义中省略[XmlArray(ElementName = "GROUP")]XmlArrayItem,并将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; }
    }
    

    您还可以将此属性添加到现有XmlArrayItemOrderedXML-class-member Groups instzead。 这将扁平化层次结构,使数组立即出现在&lt;Group&gt;-tag 中。

    【讨论】:

    • 只是建议...很好的答案。
    • &lt;GROUPLIST&gt; &lt;Group&gt; &lt;Sellers&gt; &lt;SELLER SELLERREF="1"&gt; .. &lt;/SELLER&gt; &lt;SELLER SELLERREF="2"&gt; .. &lt;/SELLER&gt; &lt;/Sellers&gt; &lt;/Group&gt; &lt;Group&gt; &lt;Sellers&gt; &lt;SELLER SELLERREF="1"&gt; .. &lt;/SELLER&gt; &lt;SELLER SELLERREF="2"&gt; .. &lt;/SELLER&gt; &lt;/Sellers&gt; &lt;/Group&gt; &lt;/GROUPLIST&gt; 它正在添加 Sellers 来代替,我只想要 GroupLIST GROUP 和 Seller
    • HimBromBeere 它正在将 GROUP 标签更改为 SELLERS,我希望完全删除此标签,任何建议
    • @UmairManzoor 已编辑
    • @HimBromBerre 确实有帮助,但我不得不在两者之间添加另一个类,谢谢。在下面发布了工作结构
    【解决方案3】:

    我认为为了做到这一点,您需要在 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 个 ,没有用
    • @UmairManzoor 嗨,试试我更新的答案。它现在应该可以工作了。
    • 确实有帮助,但我必须在两者之间添加另一个类,谢谢。在下面发布了工作结构
    • @UmairManzoor 你确定你需要另一个课程吗?请注意,在 OrderXML 类中我使用了 XmlArray 属性?你试过这样吗?
    • 是的,我确实尝试过 XMLArray 方式,但没有奏效。所以我不得不添加那个额外的类
    猜你喜欢
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2022-06-27
    • 2021-09-06
    • 2010-12-28
    相关资源
    最近更新 更多