XmlSerializer
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
&tag(XmlSerializer);
*目次 [#y61751b1]
#contents
*参考情報 [#x4026846]
*Tips [#u0f52fc8]
**多態性への対応 [#q41b2f63]
***参考リンク [#z3541ab6]
-[[C#::ポリモーフィックな型のXMLシリアライズ(1) - 虚飾の...
-[[C#::ポリモーフィックな型のXMLシリアライズ(2) - 虚飾の...
-[[How to: Control Serialization of Derived Classes:http:...
-[[@IT:連載:.NETで簡単XML 第11回 オブジェクトをXMLで...
***基本 [#u59f09f9]
-次の場合そのままではシリアライズできず例外が発生する。
-派生クラスのオブジェクトを基本クラスの変数にいれてシリア...
-Listや配列に派生したクラスのオブジェクトをいれてシリアラ...
***サンプル [#l9eef352]
-Person(基本クラス)
#pre{{
// [XmlInclude(typeof(Player))]
// [XmlInclude(typeof(Coach))]
public class Person
{
public string Name { get; set; }
}
}}
-Player(派生クラス1)
#pre{{
public class Player :Person
{
public string Position { get; set; }
}
}}
-Coach(派生クラス2)
#pre{{
public class Coach :Person
{
public string Type { get; set; }
}
}}
-Team(とりまとめクラス)。XmlArrayItemに含まれる派生クラス...
#pre{{
public class Team
{
public Team()
{
Persons = new List<Person>();
}
[XmlArrayItem(typeof(Player))]
[XmlArrayItem(typeof(Coach))]
public List<Person> Persons { get; set; }
[XmlElement(typeof(Player))]
[XmlElement(typeof(Coach))]
//
public Person MainPerson { get; set; }
}
}}
-シリアライズ実行
#pre{{
Team team = new Team();
team.Persons.Add(new Player()
{
Name = "小野伸二",
Position = "MF"
});
Player kagawa = new Player()
{
Name = "香川真司",
Position = "FW"
};
team.Persons.Add(kagawa);
team.Persons.Add(new Coach()
{
Name = "ジーコ",
Type = "自由"
});
team.MainPerson = kagawa;
XmlSerializer serializer = new XmlSerializer(...
FileStream fs = new FileStream("c:/temp/test....
serializer.Serialize(fs, team);
fs.Close();
}}
-結果のXML。MainPersonはXmlElement指定の影響で、タグがPla...
#pre{{
<?xml version="1.0"?>
<Team xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc...
<Persons>
<Player>
<Name>小野伸二</Name>
<Position>MF</Position>
</Player>
<Player>
<Name>香川真司</Name>
<Position>FW</Position>
</Player>
<Coach>
<Name>ジーコ</Name>
<Type>自由</Type>
</Coach>
</Persons>
<Player>
<Name>香川真司</Name>
<Position>FW</Position>
</Player>
</Team>
}}
-Personクラスに、XmlInclude指定をつけ、XmlElement指定を外...
#pre{{
<?xml version="1.0"?>
<Team xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc...
<Persons>
<Person xsi:type="Player">
<Name>小野伸二</Name>
<Position>MF</Position>
</Person>
<Person xsi:type="Player">
<Name>香川真司</Name>
<Position>FW</Position>
</Person>
<Person xsi:type="Coach">
<Name>ジーコ</Name>
<Type>自由</Type>
</Person>
</Persons>
<MainPerson xsi:type="Coach">
<Name>ジーコ</Name>
<Type>自由</Type>
</MainPerson>
</Team>
}}
終了行:
&tag(XmlSerializer);
*目次 [#y61751b1]
#contents
*参考情報 [#x4026846]
*Tips [#u0f52fc8]
**多態性への対応 [#q41b2f63]
***参考リンク [#z3541ab6]
-[[C#::ポリモーフィックな型のXMLシリアライズ(1) - 虚飾の...
-[[C#::ポリモーフィックな型のXMLシリアライズ(2) - 虚飾の...
-[[How to: Control Serialization of Derived Classes:http:...
-[[@IT:連載:.NETで簡単XML 第11回 オブジェクトをXMLで...
***基本 [#u59f09f9]
-次の場合そのままではシリアライズできず例外が発生する。
-派生クラスのオブジェクトを基本クラスの変数にいれてシリア...
-Listや配列に派生したクラスのオブジェクトをいれてシリアラ...
***サンプル [#l9eef352]
-Person(基本クラス)
#pre{{
// [XmlInclude(typeof(Player))]
// [XmlInclude(typeof(Coach))]
public class Person
{
public string Name { get; set; }
}
}}
-Player(派生クラス1)
#pre{{
public class Player :Person
{
public string Position { get; set; }
}
}}
-Coach(派生クラス2)
#pre{{
public class Coach :Person
{
public string Type { get; set; }
}
}}
-Team(とりまとめクラス)。XmlArrayItemに含まれる派生クラス...
#pre{{
public class Team
{
public Team()
{
Persons = new List<Person>();
}
[XmlArrayItem(typeof(Player))]
[XmlArrayItem(typeof(Coach))]
public List<Person> Persons { get; set; }
[XmlElement(typeof(Player))]
[XmlElement(typeof(Coach))]
//
public Person MainPerson { get; set; }
}
}}
-シリアライズ実行
#pre{{
Team team = new Team();
team.Persons.Add(new Player()
{
Name = "小野伸二",
Position = "MF"
});
Player kagawa = new Player()
{
Name = "香川真司",
Position = "FW"
};
team.Persons.Add(kagawa);
team.Persons.Add(new Coach()
{
Name = "ジーコ",
Type = "自由"
});
team.MainPerson = kagawa;
XmlSerializer serializer = new XmlSerializer(...
FileStream fs = new FileStream("c:/temp/test....
serializer.Serialize(fs, team);
fs.Close();
}}
-結果のXML。MainPersonはXmlElement指定の影響で、タグがPla...
#pre{{
<?xml version="1.0"?>
<Team xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc...
<Persons>
<Player>
<Name>小野伸二</Name>
<Position>MF</Position>
</Player>
<Player>
<Name>香川真司</Name>
<Position>FW</Position>
</Player>
<Coach>
<Name>ジーコ</Name>
<Type>自由</Type>
</Coach>
</Persons>
<Player>
<Name>香川真司</Name>
<Position>FW</Position>
</Player>
</Team>
}}
-Personクラスに、XmlInclude指定をつけ、XmlElement指定を外...
#pre{{
<?xml version="1.0"?>
<Team xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc...
<Persons>
<Person xsi:type="Player">
<Name>小野伸二</Name>
<Position>MF</Position>
</Person>
<Person xsi:type="Player">
<Name>香川真司</Name>
<Position>FW</Position>
</Person>
<Person xsi:type="Coach">
<Name>ジーコ</Name>
<Type>自由</Type>
</Person>
</Persons>
<MainPerson xsi:type="Coach">
<Name>ジーコ</Name>
<Type>自由</Type>
</MainPerson>
</Team>
}}
ページ名: