[英]XmlSerializer not populating sub-elements
我已经使用XSD.EXE将XSD转换为对象。 效果很好,我可以使用XMLSerializer进行反序列化,只是不会填充作为数组生成的子元素。
private SubElements[] subelementsField;
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("SubElement", IsNullable=false)]
public SubElement[] SubElement {
get {
return this.subelementField;
}
set {
this.subelementField = value;
}
}
即使XML中有数据,当我使用以下代码时,它也不会填充它:
// Deserialize
var result = serializer.Deserialize(new StringReader(data.XMLText.ToString()));
根元素都可以正常工作,而不能兼容这种XML数据的子元素:
<RootNode Weight="205" Year="1995">
<ParentNodeWhichWorksFine Contact="John Doe">
<SubElement SomeAttribute="123">
<Location>New York City</Location>
<Team>New York Pizza</Team>
</SubElement>
</ParentNodeWhichWorksFine>
</RootNode>
我是否缺少一些提示或XSD.EXE不包括的其他内容?
我假设您在其中定义属性SubElement
是与ParentNodeWhichWorksFine
相对应的ParentNodeWhichWorksFine
? 如果是这样,请尝试以下更改:
[XmlElement("SubElement", IsNullable=false)]
public SubElement[] SubElement
另外,您说您已经使用xsd.exe生成了此代码。 在这种情况下,输入什么-.xsd文件? 如果是这样,您也可以张贴其中的相关部分吗?
XmlArrayItemAttribute
属性为公共成员SubElements
定义的数组元素的子节点指定名称。 因此,如果生成的正是xsd.exe类,则该示例xml不符合xsd。
根据生成的类, <SubElement>
项应包含在父<SubElements>
节点中,如下所示:
<RootNode Weight="205" Year="1995">
<ParentNodeWhichWorksFine Contact="John Doe">
<SubElements>
<SubElement SomeAttribute="123">
<Location>New York City</Location>
<Team>New York Pizza</Team>
</SubElement>
</SubElements>
</ParentNodeWhichWorksFine>
</RootNode>
如果您对模式有控制权,我认为最好更改它,使其与示例xml相对应(不使用Pavel解决方案的父节点),因为父数组节点是多余的。
看起来您生成的类中的SubElement数组缺少[XmlArray]属性。
它需要看起来像这样:
[System.Xml.Serialization.XmlArrayAttribute("SubElements")]
[System.Xml.Serialization.XmlArrayItemAttribute("SubElement", IsNullable=false)]
public SubElement[] SubElement {
}
我认为您的XSD文件中有些不正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.