我使用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)。
我想知道原始类型被忽略的原因是什么。
答案 0 :(得分:0)
您生成的类有一个额外的字段SampleIdSpecified
,表示该字段是否为空。将其设置为true,该字段将被序列化。
如果将TransId设置为null,那么也将忽略它。
它们被忽略,因为它们是架构中的可选字段。他们有minOccurs = 0,这意味着他们不需要在那里让XML有效。