配列のシリアライズで、配列そのものにタグを与えたくない

System.Xml.Serialization.XmlSerializer を使用してプロパティに配列を持つオブジェクトを普通にXMLシリアライズする

と、配列にタグがついて、さらに配列の要素一つ一つにもタグがつく.
たとえば,


class Person {
int id;
String name;

// ... setter, getterは省略 ...
}

class Company {
Person[] persons;
String companyName;

public String CompanyName {
get { return this.companyName; }
set { this.companyName = value; }
}

public Person[] Persons {
get { return this.persons; }
set { this.persons = value; }
}
}

シリアライズすると




1001
Taro


1002
Jiro

・・・


となり,Personsタグが余計な感じとなる.

この場合,CompanyクラスのPersonsプロパティに [XmlElement(Type = typeof(クラス名))]という定義を付けると,Personsタグを省略し,Personタグの繰り返しだけにすることができる.

例:


[XmlElement(Type = typeof(Person))]
public Person[] Person {
get { return this.persons }
set { this.persons = value }
}

この場合のシリアライズ後のXMLは以下の通り.



1001
Taro


1002
Jiro

・・・