C# XmlSerializer未填充子元素

C# XmlSerializer未填充子元素,c#,xml-serialization,xsd.exe,C#,Xml Serialization,Xsd.exe,我使用XSD.EXE将XSD转换为对象。这很好,我可以使用XMLSerializer进行反序列化,只是作为数组生成的子元素没有填充 private SubElements[] subelementsField; /// <remarks/> [System.Xml.Serialization.XmlArrayItemAttribute("SubElement", IsNullable=false)] public SubElement[] SubEl

我使用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数据类型的子元素:

<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未包含的其他内容?

我假设您定义属性
子元素
的类对应于
工作精细的父节点
?如果是,请尝试以下更改:

[XmlElement("SubElement", IsNullable=false)]
public SubElement[] SubElement

另外,您说您已经使用xsd.exe生成了此代码。在这种情况下输入的是什么-一个.xsd文件?如果是这样,您也可以发布它的相关部分吗?

属性
XmlArrayItemAttribute
为公共成员
子元素定义的数组元素的子节点指定名称。因此,如果生成的类确实是xsd.exe,那么示例xml不符合xsd

根据生成的类,
项应包含在父
节点中,如下所示:

<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相对应(下面没有父节点),因为父数组节点是多余的。

看起来生成的类中的子元素数组缺少[XmlArray]属性

它需要如下所示:

[System.Xml.Serialization.XmlArrayAttribute(“子元素”)]
[System.Xml.Serialization.XmlArrayItemAttribute(“子元素”,IsNullable=false)]
公共子元素[]子元素{
}


我认为您的XSD文件中有些地方不太正确。

结果是源XML(子元素)中没有包含标记。非常感谢,你救了我一天。
<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>
[System.Xml.Serialization.XmlArrayAttribute("SubElements")] [System.Xml.Serialization.XmlArrayItemAttribute("SubElement", IsNullable=false)] public SubElement[] SubElement { }