繁体   English   中英

XML序列化问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM