序列化xsd生成的类

时间:2018-01-17 08:49:22

标签: c# xml serialization xsd xmlserializer

我使用xsd.exe生成.cs类。

xsd文件如下

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="SendComments">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Input">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="TransId" maxOccurs="1" minOccurs="0" type="xs:string"/>
              <xs:element name="SampleId" minOccurs="0" maxOccurs="1" type="xs:long"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Output" type="xs:string" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

在我生成的类中,它生成了正确的字段。 但是,当我调用序列化程序时。 SampleId字段被忽略。

Serializer code segment:

var serializer = new XmlSerializer(typeof(SendComments));
            using (StringWriter stringWriter = new StringWriter())
            {
                serializer.Serialize(stringWriter, SPCComment);
                return stringWriter.ToString();
            }

结果:

<?xml version="1.0" encoding="utf-16"?>
<SPCSendComments xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Input>
    <TransId>-</TransId>
  </Input>
</SPCSendComments>

我尝试使用其他.xsd文件,序列化时忽略所有原始类型(bool,int,long)。

我想知道原始类型被忽略的原因是什么。

1 个答案:

答案 0 :(得分:0)

您生成的类有一个额外的字段SampleIdSpecified,表示该字段是否为空。将其设置为true,该字段将被序列化。

如果将TransId设置为null,那么也将忽略它。

它们被忽略,因为它们是架构中的可选字段。他们有minOccurs = 0,这意味着他们不需要在那里让XML有效。