具有嵌套复杂类型的验证错误 xsd 架构

Validation error xsd schema with nested complex types

验证时出现的错误是:

The element 'Details' in namespace 
'<-namespace->' has incomplete content. List of possible elements expected: 
'PersonAddress' in namespace '<-namespace->'.

架构如下(为了便于阅读,删除了大部分):

<xs:complexType name="Person">
    <xs:all>            
        <xs:element minOccurs="1" maxOccurs="1" name="Details" type="PersonDetails" />
    </xs:all>
</xs:complexType>

<xs:complexType name="PersonDetails">
    <xs:all>        
        <xs:element minOccurs="1" maxOccurs="1" nillable="true" name="PersonAddress" type="PersonAddress" />
    </xs:all>
</xs:complexType>

<xs:complexType name="PersonAddress">
    <xs:all>
          <xs:element minOccurs="1" maxOccurs="1" name="Street" type="xs:string" />
          <xs:element minOccurs="1" maxOccurs="1" nillable="true" name="ZipCode" type="xs:int" />         
    </xs:all>
</xs:complexType>

当我使用架构和我的 DTO:s 序列化到 XML 时,我将 PersonAddress 映射到 null 或反映 'PersonAddress'

的对象

除了我最后的 xml 结果是这样的:

</PersonDetails>
     <PersonAddress xsi:nil="true" />
</PersonDetails>

相反,我在针对 xsd 模式进行验证时遇到错误,如本 post 中首先解释的那样。


当我将 PersonDetails 中的 PersonAddress 的 minOccurs 设置为零时,它工作正常:

<xs:element minOccurs="0" maxOccurs="1" nillable="true" name="PersonAddress" type="PersonAddress" />

但问题是当我将映射对象设置为 'null' 时,该元素根本不显示。它不存在。

我在 xsd 架构中遗漏了什么?

好的,所以我在 DTO 中犯了一个错误。

现在它已启动并正在处理此更改:

[XmlElement(IsNullable = true)]
public PersonAddress PersonAddress { get; set; }

忘记将 IsNullable 标记添加到 DTO 属性。

自我提醒,在发布到 Stack Overflow 之前检查是否有脑残..