【发布时间】: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