1

クラスを XML にシリアル化しようとしていますが、出力にはいくつかの厳しい要件があります (Rails の ActiveResource にそれを消費させたいため)。これらの要件の 1 つは、特に配列に関するものです。以下に 2 つの例を示します。

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 をだましてこの出力を生成する方法はありますか?

4

1 に答える 1

0

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);
于 2010-02-06T16:36:40.620 に答える