0

xmlをカスタムオブジェクトに逆シリアル化しようとしていますが、閉じていますが、すべての親が正常に機能しているため、最もネストされた要素が入力されていません。

逆シリアル化プロセスの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() { }
}

したがって、逆シリアル化を介してカスタムオブジェクトを作成すると、インデックスフィールドとそれに関連する属性を除いて、すべてが入力されます。そのクラスを設定するのはどこが間違っていますか?

4

2 に答える 2

1

XmlArrayItemを追加してみてください。

[XmlArrayItem(typeof(IndexField))]
public List<IndexField> IndexFields{ get; set; }
于 2012-11-30T16:02:15.410 に答える
0

わかった。「IndexFields」と呼ばれる(xml の構造に基づいて)もう 1 つのクラスが必要でした。それには、「IndexField」のリストが含まれています....1 つのレベルが欠けていました。

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

    public IndexFields() { }
}
于 2012-11-30T16:14:42.777 に答える