原始 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 才有效。
我使用 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 才有效。