如何将单个属性映射到多个 XmlElementAttribute 以进行序列化?
Posted
技术标签:
【中文标题】如何将单个属性映射到多个 XmlElementAttribute 以进行序列化?【英文标题】:How do I map a single property to multiple XmlElementAttribute for serialization? 【发布时间】:2021-12-06 16:17:37 【问题描述】:我有一个不知道如何实现的类。 不确定如何实例化并将 Quantity 选项设置为特定值。 序列化未产生所需的输出。 我正在尝试将类序列化为输出
<aaaa>
<Quantity>Quantity</Quantity>
</aaaa>
我期待的地方
<aaaa>
<Quantity>2</Quantity>
</aaaa>
public class aaaa
private object itemField;
[System.Xml.Serialization.XmlElementAttribute("Available", typeof(bool))]
[System.Xml.Serialization.XmlElementAttribute("Lookup", typeof(string))]
[System.Xml.Serialization.XmlElementAttribute("Quantity", typeof(string), DataType="nonNegativeInteger")]
public object Item
get
return this.itemField;
set
this.itemField = value;
private void myFunc()
try
var myClass = new aaaa
Item = "Quantity"
;
XmlSerializer serializer = new XmlSerializer(typeof(aaaa));
serializer.Serialize(stringwriter , Item);
catch (Exception ex)
这是自动生成类的 XML。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="aaaa">
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:element name="Available" type="xsd:boolean"/>
<xsd:element name="Quantity" type="xsd:nonNegativeInteger"/>
<xsd:element name="Lookup" type="xsd:string"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
【问题讨论】:
有什么问题?请提供更多详细信息并提出具体问题。 "when I go to serialize" - 这并不演示您正在执行的具体操作。 "it barfed" - 这没有描述您观察到的具体错误。请澄清问题。 您不应该使用System.Object
作为属性的声明返回类型 - 使用强类型。避免使用 C# 匿名类型,因为我们有 ValueTuples 和 Record Types,它们有点没用。
【参考方案1】:
要获得所需的输出,您必须以这种方式实例化您的类:
var aaaa = new aaaa();
aaaa.Item = "500";
aaaa.ItemElementName = ItemChoiceType.Quantity;
然后你会得到这个:
<aaaa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Quantity>500</Quantity>
</aaaa>
Item 包含元素的值,因此您必须确保该对象的类型尊重这些属性中的内容:
[System.Xml.Serialization.XmlElementAttribute("Available", typeof(bool))]
[System.Xml.Serialization.XmlElementAttribute("Lookup", typeof(string))]
[System.Xml.Serialization.XmlElementAttribute("Quantity", typeof(string), DataType="nonNegativeInteger")]
正如您所见,Quantity 是一个字符串,而不是一个实际的整数,因此使用整数是行不通的。
【讨论】:
添加此以完成代码:[System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(IncludeInSchema=false)] public enum ItemChoiceType Quantity 并添加到类 aaa public ItemChoiceTypeTest ItemElementName ;以上是关于如何将单个属性映射到多个 XmlElementAttribute 以进行序列化?的主要内容,如果未能解决你的问题,请参考以下文章