Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置nillable=true并在XML文档中使用默认属性是否有效?_C#_Xml_Xsd_Xsi - Fatal编程技术网

C# 设置nillable=true并在XML文档中使用默认属性是否有效?

C# 设置nillable=true并在XML文档中使用默认属性是否有效?,c#,xml,xsd,xsi,C#,Xml,Xsd,Xsi,使用C#和.NET4.0 我有一个生成的模式,如下所示: <xsd:element name="EstimatedDate" minOccurs="0" nillable="true" default="1900-01-01T00:00:00"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:dateTime">

使用C#和.NET4.0

我有一个生成的模式,如下所示:

<xsd:element name="EstimatedDate" minOccurs="0" nillable="true" default="1900-01-01T00:00:00">
  <xsd:complexType>
       <xsd:simpleContent>
           <xsd:extension base="xsd:dateTime">
                <xsd:attribute name="origVal" type="xsd:dateTime" use="optional" />
           </xsd:extension>
       </xsd:simpleContent>
  </xsd:complexType>

当我用空值序列化对象时,我得到:

<EstimatedDate xsi:nil="true" />

但我得到了一个反序列化:“当一个属性为'xsi:nil'且值为'true'时,必须没有固定值。”


当我查看XML规范时,我没有看到nillable和default属性是互斥的,但是我的其他dateTime XML类型是nillable,但没有默认属性,可以正常工作。

我认为这可能是XML模式规范中令人困惑的地方之一(有趣的是,即使是1.1规范也只是默认和固定的组合)如果元素存在缺省值,当元素存在时,“强”>空< /强>,并且nRebug元素<强>不能< < /强>有任何内容,那么混淆是有意义的……哪一个是:NULL还是默认?换句话说,当两个条件都存在时,哪一个优先?反序列化程序在那里请求帮助…

错误消息描述了spec:Validation Rule:Element local Valid(Element)中存在的约束第3.3.2条规定,当xsi:nil=true时,必须没有固定的值。然而,据我所知,默认值并没有被禁止,所以您的模式处理器似乎过于急于寻找错误

我认为模式的正确行为是:如果元素为空且xsi:nil不存在或为false,则使用默认值;如果元素为空且xsi:nil为true,则保持原样


(您可以尝试让Microsoft解决此问题,也可以尝试切换到Saxon…)

这正是我所想的。使用可为零的默认值没有什么意义。我可能只需要围绕模式定义进行编码,因为我在项目中无法控制它。嗨,Michael,你能解释一下Saxon在这里有什么帮助吗?我想我们讨论的是将XML文档反序列化为一组C#类。我确认这不是.NET的XML架构处理器的问题,因为上面的XML可以通过内置实现进行验证…抱歉,我误解了,我以为您的问题是Microsoft XSD处理器。恐怕数据绑定工具通常不到100%符合XSD规范。