验证期间发生的错误是:
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>
当我使用Schema和我的DTO序列化到XML时:我将PersonAddress映射到null或反映'PersonAddress'的对象
我除了我的最终xml之外,结果如下:
</PersonDetails>
<PersonAddress xsi:nil="true" />
</PersonDetails>
相反,我在针对xsd架构的验证过程中遇到了错误,如本文首先所述。
当我在PersonDetails中的PersonAddress上将minOccurs设置为零时,它工作正常:
<xs:element minOccurs="0" maxOccurs="1" nillable="true" name="PersonAddress" type="PersonAddress" />
但问题是,当我将映射对象设置为'null'时,该元素根本不会显示。它不存在。
我在xsd架构中遗漏了什么?
答案 0 :(得分:0)
好的,所以我在DTO犯了错误。
现在它已经开始并正在进行这项改变:
[XmlElement(IsNullable = true)]
public PersonAddress PersonAddress { get; set; }
忘记将IsNullable标记添加到DTO属性。
自我注意,在发布到Stack Overflow之前检查mindfuck ..