代码之家  ›  专栏  ›  技术社区  ›  Kevin Berridge

在.NET中使用type=“array”对数组进行XML序列化

  •  1
  • Kevin Berridge  · 技术社区  · 14 年前

    我正试图将类序列化为XML,但我对输出有一些严格的要求(因为我希望Rails的ActiveResource使用它)。其中一个要求是专门针对阵列的。以下是两个例子:

    class Person { public string FirstName { get; set; } }
    
    List<Person> people = new List<Person>();
    people.Add( new Person {...} );
    people.Add( new Person {...} );
    

    如果序列化人员列表,则需要此输出:

    <People type="array">
      <Person>
        <FirstName>blah</FirstName>
      </Person>
      <Person>...</Person>
    </People>
    

    另一个例子如下:

    class Person
    {
      public string FirstName { get; set; }
      public List<Address> Addresses { get; set; }
    }
    
    class Address
    {
      public string Line1 { get; set; }
    }
    

    如果序列化一个人,我需要这个输出:

    <Person>
      <FirstName>blah</FirstName>
      <Addresses type="array">
        <Address>...</Address>
      </Addresses>
    </Person>
    

    是否有办法欺骗XmlSerializer生成此输出?

    1 回复  |  直到 14 年前
        1
  •  0
  •   sirchristian    14 年前

    你也可以看看 Controlling XML Serialization Using Attributes .

    像这样的东西可能对你有用

    [XmlRoot(ElementName="People")]
    public class PeopleType
    {
        [XmlElement(ElementName="Person")]
        public List<Person> people  = new List<Person>()
        {
            new Person { FirstName = "Bob" },
            new Person { FirstName = "Sally" }
        };
    
        [XmlAttribute]
        public string type = "array";
    }
    
    PeopleType p = new PeopleType();
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("", "");
    XmlSerializer xs = new XmlSerializer(typeof(PeopleType));
    using (StreamWriter sw = new StreamWriter("out.xml", false))
        xs.Serialize(sw, p, ns);