[英]XML Serialization issue for minoccurs
我有一个使用基于Java的Web服务的.NET Web应用程序。 其中一个名为Optional的对象包含搜索条件字段。 该架构如下:
<xsd:complexType name="Optional">
<xsd:sequence>
<xsd:element name="FromAmount" nillable="true" type="xsd:float" minOccurs="0" />
<xsd:element name="ToAmount" nillable="true" type="xsd:float" minOccurs="0" />
<xsd:element name="FromDate" nillable="true" type="xsd:dateTime" minOccurs="0" />
<xsd:element name="ToDate" nillable="true" type="xsd:dateTime" minOccurs="0" />
<xsd:element name="FromCheckNumber" nillable="true" type="xsd:long" minOccurs="0" />
<xsd:element name="ToCheckNumber" nillable="true" type="xsd:long" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
我遇到的问题是,即使在Web应用程序中为子元素分配了值,它们也不会序列化。 如果删除minOccurs属性,则一切正常。
我如何使这些元素是可选的,但在为其分配值时进行序列化?
在此先感谢您的帮助。
在.NET中,在模式中标记为可选的非null类型(在.NET中)的WS具有为其生成的附加指定属性,该属性控制元素是否出现。 非常烦人的是,该值的设置器没有设置其他指定的标志,因此您需要执行此操作。
x.ToAmmount = 24.0f;
x.ToAmmountSpecified = true;
// etc for the rest of the poperties
此架构未定义任何xml文档类型。 它只是为名为“可选”的compex类型提供了声明,但没有从任何地方引用此类型。
所定义的xml文档必须至少具有一个top元素。 这个顶级元素需要在某个地方(在全局范围内)进行定义。 提供的架构中没有这样的定义。
以下是xml模式的最小示例,该示例与提供的xml模式相似,但确实定义了xml文档:
<?xml version="1.0" encoding="utf-8"?> <xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="Optional" type="Optional"/> <xsd:complexType name="Optional"> <xsd:sequence> <xsd:element name="FromAmount" nillable="true" type="xsd:float" minOccurs="0" /> <xsd:element name="ToAmount" nillable="true" type="xsd:float" minOccurs="0" /> <xsd:element name="FromDate" nillable="true" type="xsd:dateTime" minOccurs="0" /> <xsd:element name="ToDate" nillable="true" type="xsd:dateTime" minOccurs="0" /> <xsd:element name="FromCheckNumber" nillable="true" type="xsd:long" minOccurs="0" /> <xsd:element name="ToCheckNumber" nillable="true" type="xsd:long" minOccurs="0" /> </xsd:sequence> </xsd:complexType> </xsd:schema>
可以针对此模式成功验证的最简单的xml文档只是
<Optional/>
(因为top元素的所有子元素都定义为可选)。
希望这会有所帮助。
干杯,
迪米特·诺夫切捷夫
我的理解是,如果不存在该值,则nillable =“ true”在值XML中生成xsi:nil =“ true”,这意味着即使该值为null也会始终创建该元素。
尝试删除nillable属性并保持minOccurs =“ 0”。 还没有尝试过。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.