有没有办法将包含简单文本或子元素的元素反序列化为带有XmlSerializer的字符串?
Xml样本:
<Attribute>
<AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">thisistext</AttributeValue>
<AttributeValue>
<e:Authorities xmlns:e="urn:dummy">
<e:Authority>ORG_CHIEF</esia-encoder:Authority>
</e:Authorities>
</AttributeValue>
</Attribute>
C#属性:
[XmlElement("AttributeValue", IsNullable = true)]
public string[] AttributeValue { get; set; }
第一个AttributeValue的反序列化成功,但下一个失败。难怪,因为ReadElementString方法需要简单或空的内容。我正在寻找一种方法告诉序列化程序“将此元素的内容放入字符串,无论它包含什么”。
答案 0 :(得分:1)
实际上,XML中的第二个值是:
<e:Authorities xmlns:e="urn:dummy">
<e:Authority>ORG_CHIEF</esia-encoder:Authority>
</e:Authorities>
由于以下原因,这不是有效的string
dataType:
public string[] AttributeValue {get; set;}
答案 1 :(得分:0)
如果您能够在XSD中定义它,则可以使用XSD2Code或xsd.exe为XSD创建一个类以反序列化。
这个怎么样?
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Attribute">
<xs:complexType>
<xs:sequence>
<xs:element name="AttributeValue" maxOccurs="unbounded">
<xs:complexType>
<xs:choice>
<xs:element name="AuthoritiesString" type="xs:string"/>
<xs:element name="AuthoritiesElement">
<xs:complexType>
<xs:sequence>
<xs:element name="Authority"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>