c# - XML 元素和数组

标签 c# xml-serialization

我正在尝试与发送以下两条消息的硬件进行通信。在收到消息时,我不知道我得到的是这两个消息结构中的哪一个。 使用 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 字段。

http://www.w3schools.com/schema/schema_complex_mixed.asp

<?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; }
}

关于c# - XML 元素和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8502403/

相关文章:

c# - 使用 Windows 窗体移植旧的 Flash 游戏 - 如何嵌入 Flash Player dll?

c# - WebAPI 和 Angular JS Excel 文件下载 - 文件已损坏

c# - 无法使用 autofac 注册结构实例

c# - 我可以通过代码而不是属性指定 XMLRoot 吗?

xml - Oracle 的 xmlserializer 中的尾随空格

c# - Xml 序列化后代列表

c# - UnityContainer,子容器注入(inject)

c# - Windows 服务不正确的功能

c# - XML 序列化期间缺少 SecurityProtocolType.Ssl3 枚举值

xml - 将 DOM 序列化为 XML 文本文件的算法是什么?