【发布时间】:2016-07-28 06:39:22
【问题描述】:
我无法从我的 xml 中删除 clsProduct 中的属性 Values 的名称。我尝试将[XmlElement(ElementName = "Values", Type = typeof(clsValues)] 用于我的List<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))]
public List<clsValues> Values { get; set; }
而不是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>
【问题讨论】:
-
附带说明,现在是停止使用
cls前缀并开始遵循正常 .NET 命名约定的好时机。 -
@JonSkeet 我通常不使用前缀。我没有创建我正在扩展它的项目,并且不希望在一个应用程序中有两种命名约定。
-
好吧,我建议你的同事们开始遵循命名约定——不要忘记你正在发布一个 Stack Overflow 问题;它不必是确切的代码,只要它显示相同的确切问题即可。这意味着您可以使其更简单、更传统,从而减少对读者的干扰。
标签: c# xml xml-serialization removeclass