0

我试图将我的xml反序列化为自定义对象,而且我很接近,但是最嵌套的元素没有填充,而所有的父类都正常工作。c#使用嵌套类反序列化自定义类

下面是反序列化过程中的XML和类:

<?xml version="1.0" encoding="utf-8" ?> 
<dataMapping> 
    <documentType attr1="blah" attr2="blah2" attr3="blah3"> 
    <indexFields> 
     <indexField name1="field1A" name2="field1B" type="int" /> 
     <indexField name1="field2A" name2="field2B" type="int" /> 
     <indexField name1="field3A" name2="field3B" type="int" /> 
    </indexFields> 
    </documentType> 
    <documentType attr1="asdf" attr2="asdf2" attr3="asdf3"> 
    <indexFields> 
     <indexField name1="field1A" name2="field1B" type="int" /> 
     <indexField name1="field2A" name2="field2B" type="int" /> 
     <indexField name1="field3A" name2="field3B" type="int" /> 
    </indexFields> 
    </documentType> 
</dataMapping> 


[XmlRoot("dataMapping")] 
public class dataMapping 
{ 
    [XmlElement("documentType")] 
    public List<DocumentType> DocumentTypes{ get; set; } 

    public dataMapping() { } 
} 

[XmlRoot("documentType")] 
public class DocumentType 
{ 
    [XmlAttribute("attr1")] 
    public string Area { get; set; } 

    [XmlAttribute("attr2")] 
    public string Cabinet { get; set; } 

    [XmlAttribute("attr3")] 
    public string SearchGroup { get; set; } 

    [XmlElement("indexFields")] 
    public List<IndexField> IndexFields{ get; set; } 

    public DocumentType() { } 
} 

[XmlRoot("indexField")] 
public class IndexField 
{ 
    [XmlAttribute("name1")] 
    public string Name1 { get; set; } 

    [XmlAttribute("name2")] 
    public string Name2 { get; set; } 

    [XmlAttribute("type")] 
    public string DataType { get; set; } 

    public string ObjectValue { get; set; } 

    public IndexField() { } 
} 

所以,通过创建反序列化我的自定义对象时,一切都只是索引字段填入及其相关属性。我在哪里设置这个课程是错误的?

回答

0

得到它弄清楚。我需要一个类(基于我有xml结构的方式)称为“IndexFields”,然后包含“IndexField”列表....只是缺少一个级别。

[XmlRoot("indexFields")] 
public class IndexFields 
{ 
    [XmlElement("indexField")] 
    public List<IndexField> NestedIndexFields { get; set; } 

    public IndexFields() { } 
} 
1

尝试添加XmlArrayItem它应该帮助

[XmlArrayItem(typeof(IndexField))] 
public List<IndexField> IndexFields{ get; set; }