【问题标题】:primitive class being ignore when serializing xsd generated class序列化 xsd 生成的类时忽略原始类
【发布时间】:2018-01-17 08:49:21
【问题描述】:

我使用 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 字段被忽略。

序列化器代码段:

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)。

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

【问题讨论】:

  • 缺少命名空间:XmlSerializerNamespaces namesSpaces = new XmlSerializerNamespaces(); namesSpaces.Add("xs", "w3.org/2001/XMLSchema"); var serializer = new XmlSerializer(typeof(SendComments)); using (StringWriter stringWriter = new StringWriter()) { serializer.Serialize(stringWriter, SPCComment, namespaces); return stringWriter .ToString(); }

标签: c# xml serialization xsd xmlserializer


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-01-31
    • 1970-01-01
    • 2016-08-16
    • 2012-02-01
    • 2011-04-13
    • 2015-04-03
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多