原始 class 在序列化 xsd 时被忽略生成 class

primitive class being ignore when serializing xsd generated class

我使用 xsd.exe 生成了一个 .cs class。

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>

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

序列化程序代码段:

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)都被忽略了。

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

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

如果您将 TransId 设置为 null,它也将被忽略。

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