ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#序列化从结果中删除属性名称

2019-11-18 10:16:32  阅读:214  来源: 互联网

标签:removeclass xml-serialization xml c


我无法从我的xml中删除clsProduct中的属性值的名称.我尝试对列表< clsValues>使用[XmlElement(ElementName =“ Values”,Type = typeof(clsValues)],但它没有给我我想要的结果.

您可以在下面看到我需要的结果.

我的序列化课程的一部分:

[Serializable]
public class clsProduct
{
    [XmlAttribute("ID")]
    public string ID { get; set; }

    [XmlAttribute("UserTypeID")]
    public string UserTypeID { get; set; }

    [XmlArrayItem(ElementName = "Values", Type = typeof(clsValues))]
    public List<clsValues> Values { get; set; }

}

[Serializable]
public class clsValues
{
    [XmlElement(ElementName = "Value")]
    public clsValue Value { get; set; }

    [XmlArray(ElementName = "MultiValue"),
    XmlArrayItem(ElementName = "Value")]
    public List<clsValue> MultiValue { get; set; }
}

[Serializable]
public class clsValue
{
    [XmlAttribute("AttributeID")]
    public string AttributeID { get; set; }

    [XmlText]
    public string Value { get; set; }
}

我当前的xml结果:

<Product ID="PROD-01111010" UserTypeID="Product">
   <Values>
     <Values>
        <Value AttributeID="ATTR-7196">201607280755</Value>
     </Values>
     <Values>
        <Value AttributeID="ATTR-6236">PTFE 125 + 25% GF, Platte</Value>
     </Values>
     <Values>
        <MultiValue>
            <Value>PLATTE</Value>
            <Value>LUBRIFLON 225</Value>
            <Value>PLAQUE</Value>
            <Value>LUBRIFLON 22</Value>
        </MultiValue>
     </Values>
  </Values>
</Product>

结果我需要:

<Product ID="PROD-01111010" UserTypeID="Product">
  <Values>
     <Value AttributeID="ATTR-7196">201607280755</Value>
     <Value AttributeID="ATTR-6236">PTFE 125 + 25% GF, Platte</Value>
     <MultiValue>
        <Value>PLATTE</Value>
        <Value>LUBRIFLON 225</Value>
        <Value>PLAQUE</Value>
        <Value>LUBRIFLON 22</Value>
     </MultiValue>
   </Values>
 </Product>

有人可以帮忙吗?

谢谢

编辑:
当我使用

[XmlElement(ElementName =“ Values”,Type = typeof(clsValues))]
 公共列表< clsValues>值{get;组; }

而不是XmlArrayItem我得到以下结果:

<Product ID="PROD-01111010" UserTypeID="Product">
     <Values>
        <Value AttributeID="ATTR-7196">201607280755</Value>
     </Values>
     <Values>
        <Value AttributeID="ATTR-6236">PTFE 125 + 25% GF, Platte</Value>
     </Values>
     <Values>
        <MultiValue>
            <Value>PLATTE</Value>
            <Value>LUBRIFLON 225</Value>
            <Value>PLAQUE</Value>
            <Value>LUBRIFLON 22</Value>
        </MultiValue>
     </Values>
</Product>

解决方法:

您的问题与此属性有关:

[XmlArrayItem(ElementName = "Values", Type = typeof(clsValues))]
public List<clsValues> Values { get; set; }

这意味着存在多个具有特定类型clsValues的称为Values的元素.并且每个都具有Value或MultiValue子项中的一个或两个.

您想要的是将数组作为元素值,并使数组项成为您在两种不同元素类型之间的选择-它要么包含Value元素,要么包含MultiValue元素.

您可以这样构造:

public class Product
{
    [XmlAttribute("ID")]
    public string Id { get; set; }

    [XmlAttribute("UserTypeID")]
    public string UserTypeId { get; set; }

    [XmlArray("Values")]
    [XmlArrayItem("Value", typeof(Value))]
    [XmlArrayItem("MultiValue", typeof(MultiValue))]
    public List<object> Values { get; set; }
}

public class MultiValue
{
    [XmlElement(ElementName = "Value")]
    public List<Value> Values { get; set; }
}

public class Value
{
    [XmlAttribute("AttributeID")]
    public string AttributeId { get; set; }

    [XmlText]
    public string Text { get; set; }
}

请参阅this fiddle以获取有效的演示.

标签:removeclass,xml-serialization,xml,c
来源: https://codeday.me/bug/20191118/2027560.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有