1

ネストされた子クラスを持つ単純な pesron クラス。すべてのプロパティに属性が付けられ、プライベート フィールドは無視されます。

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.450")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[XmlRoot("person")]
public  class Person
{
    [XmlIgnore]
    int _id;
    [XmlIgnore]
    string _firstName;
    [XmlIgnore]
    string _lastName;
    [XmlIgnore]
    Person[] _children;
    public Person(){}
    public Person(int id, string firstName, string lastName)
    {
        this._id = id;
        this._firstName = firstName;
        this._lastName = lastName;
    }
    [XmlAttribute]
    public int Id { get { return _id; } }
    [XmlAttribute]
    public string FirstName { get { return _firstName; } }
    [XmlAttribute]
    public string LastName { get { return _lastName; } }
    [XmlElement("children")]
    public Person[] Children
    {
        get { return _children; }
        set { _children = value; }
    }
}

上記のタイプがシリアル化されると、xml 構造体のみが作成され、属性は無視されます。出力は

  <?xml version="1.0" encoding="utf-16" ?> 
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <children>
    <children>
      <children /> 
      <children /> 
     </children>
     <children>
      <children /> 
     </children>
   </children>
   <children /> 
  </person>
4

2 に答える 2

1

セッターと、子としての人の配列も必要です

    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.450")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [XmlRoot("person")]
    public class Person
    {
        public Person() { }
        public Person(int id, string firstName, string lastName)
        {
            Id = id;
            FirstName = firstName;
            LastName = lastName;
        }
        [XmlAttribute]
        public int Id { get; set; }

        [XmlAttribute]
        public string FirstName { get; set; }

        [XmlAttribute]
        public string LastName { get; set; }

        [XmlArray("children")]
        [XmlArrayItem("person")]
        public Person[] Children { get; set; }
    }
于 2012-07-29T08:16:09.280 に答える
1

シリアル化可能なプロパティにセッターを追加する必要があります。それ以外の場合は無視されます。

于 2012-07-29T07:58:41.697 に答える