XML元素和数组
本文关键字:数组 元素 XML | 更新日期: 2023-09-27 18:17:43
我正在尝试与发送以下两条消息的硬件进行通信。在接收消息时,不知道我得到的是两种消息结构中的哪一种。使用XSD,我取了.xml并分别为每个文件创建了. XSD和c#文件,但这在最终解决方案中是不实际的,因为我不知道我将拥有的消息。开发人员似乎在第一个实例中使用了'ParameterValue'作为数组,第二个实例使用了一个简单的字符串。是否有可能有一段代码将"反序列化"这两个消息?如果我在第二条消息上使用第一条消息的代码,则ParameterValue字段是一个空数组。
= =第一条信息= =
<Parameters>
<Parameter>
<ParameterName>ResponseCode</ParameterName>
<ParameterValue>2</ParameterValue>
</Parameter>
<Parameter>
<ParameterName>ResponseValue</ParameterName>
<ParameterValue>
<ReturnParameters>
<ReturnParameter>
<ParameterName>Data1</ParameterName>
<ParameterValue>Parameter Not Found</ParameterValue>
</ReturnParameter>
<ReturnParameter>
<ParameterName>Data2</ParameterName>
<ParameterValue>Parameter Not Found</ParameterValue>
</ReturnParameter>
</ReturnParameters>
</ParameterValue>
</Parameter>
</Parameters>
= = = =第二条
<Parameters>
<Parameter>
<ParameterName>ResponseCode</ParameterName>
<ParameterValue>2</ParameterValue>
</Parameter>
<Parameter>
<ParameterName>ResponseValue</ParameterName>
<ParameterValue>Success</ParameterValue>
</Parameter>
</Parameters>
将mixed="true"
添加到XSD中。这表示您希望将XML元素与文本结合起来。这将导致c#类中出现Text
字段。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Parameters" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Parameters" msdata:IsDataSet="true" msdata:Locale="en-US">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Parameter">
<xs:complexType>
<xs:sequence>
<xs:element name="ParameterName" type="xs:string" minOccurs="0" />
<xs:element name="ParameterValue" minOccurs="0" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="ReturnParameters" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="ReturnParameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="ParameterName" type="xs:string" minOccurs="0" />
<xs:element name="ParameterValue" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
,
public partial class ParametersParameterParameterValue {
[System.Xml.Serialization.XmlArrayAttribute(
Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlArrayItemAttribute(
"ReturnParameter",
typeof(ParametersParameterParameterValueReturnParametersReturnParameter),
Form=System.Xml.Schema.XmlSchemaForm.Unqualified,
IsNullable=false)]
public ParametersParameterParameterValueReturnParametersReturnParameter[][]
ReturnParameters { get; set; }
[System.Xml.Serialization.XmlTextAttribute()]
public string[] Text { get; set; }
}