C# 使用C中的XmlSerializer将复杂元素内容反序列化为字符串#

C# 使用C中的XmlSerializer将复杂元素内容反序列化为字符串#,c#,xmlserializer,xml-deserialization,C#,Xmlserializer,Xml Deserialization,有没有办法用XmlSerializer将包含简单文本或子元素的元素反序列化为字符串 Xml示例: <Attribute> <AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">thisistext</AttributeValue> <AttributeValue> <e:Authori

有没有办法用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>

反序列化第一个AttributeValue成功,但下一个失败。难怪,beacause ReadElementString方法需要简单或空的内容。我正在寻找一种方法来告诉序列化程序“将此元素的内容放入字符串,不管它包含什么”。

实际上,XML中的第二个值是:

 <e:Authorities xmlns:e="urn:dummy">
     <e:Authority>ORG_CHIEF</esia-encoder:Authority>
 </e:Authorities>

实际上,XML中的第二个值是:

 <e:Authorities xmlns:e="urn:dummy">
     <e:Authority>ORG_CHIEF</esia-encoder:Authority>
 </e:Authorities>

如果您能够在XSD中定义它,那么可以使用或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>

如果您能够在XSD中定义它,您可以使用或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>


我想将第二个值(元素权限的xml标记)作为字符串获取。@artplastika那么您的类不是xml文档的表示形式。这将需要您实现
IXmlSerializable
接口来自定义(反)序列化类。默认情况下,您对IXmlSerializable的建议是指,我正在寻找基于元数据的解决方案。但既然没有其他办法,我接受这一回答我想将第二个值(元素权限的xml标记)作为字符串获取。@artplastika那么您的类不是xml文档的表示形式。这将需要您实现
IXmlSerializable
接口来自定义(反)序列化类。默认情况下,您对IXmlSerializable的建议是指,我正在寻找基于元数据的解决方案。但既然没有其他办法,我接受这一回答