配列をXmlSerializingするときにルートノード名を設定する方法は?

StackOverflow https://stackoverflow.com/questions/1624540

  •  06-07-2019
  •  | 
  •  

質問

XMLとしてシリアル化するオブジェクトの配列があります。これらのオブジェクトには、XMLノード名を設定するための注釈が付けられていますが、XMLルートノードの名前を設定する方法について疑問に思っていました。

コードは次のようになります。

// create list of items
List<ListItem> list = new List<ListItem>();
list.Add(new ListItem("A1", new Location(1, 2)));
list.Add(new ListItem("A2", new Location(2, 3)));
list.Add(new ListItem("A3", new Location(3, 4)));
list.Add(new ListItem("A4<&xyz>", new Location()));

// serialise
XmlSerializer ser = new XmlSerializer(typeof(ListItem[]));
FileStream os = new FileStream(@"d:\temp\seri.xml", FileMode.Create);
ser.Serialize(os, list.ToArray());
os.Close();

出力は次のようになります。

<?xml version="1.0"?>
<ArrayOfPlace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Place>
    <Placename>A1</Placename>
    <Location>
      <Lat>1</Lat>
      <Long>2</Long>
    </Location>
  </Place>
  <Place>
  ...

ListItem XmlElement アノテーションを使用して Place に名前が変更されましたが、ルートノードの名前を設定して< strong> 'ArrayOfPlace' ノード?

役に立ちましたか?

解決

これを試してください:

XmlSerializer ser = new XmlSerializer(
    typeof(ListItem[]), 
    new XmlRootAttribute("CustomRootName"));

他のヒント

XmlRoot 属性を使用します。

自分でも解決策を見つけました。

XmlSerializerをインスタンス化するときに、ルートノードの名前を設定できます。以下を参照してください。

XmlSerializer ser = new XmlSerializer(typeof(ListItem[]), new XmlRootAttribute("AllPlaces"));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top