DataContractを使って、XMLファイルをクラスに変換
XMLファイルの読み込み→クラスの作成を楽にできる方法があったのでメモ
1 XML定義ファイルを用意する
2 XML定義にあった形でクラスを宣言
3 XMLを読み込んでクラスへと変換
<?xml version="1.0" encoding="utf-8" ?>
<SiteList xmlns="http://schemas.datacontract.org/2004/07/XmlDataContractTest" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<WebSite>
<Name>ヤフージャパン</Name>
<URL>http://www.yahoo.co.jp
<UserID>yahooUser</UserID>
<Pass>hogehoge</Pass>
<Biko>yahoo</Biko>
</WebSite>
<WebSite>
<Name>Google</Name>
<URL>http://www.google.co.jp
<UserID>googleUser</UserID>
<Pass>hogehoge</Pass>
<Biko>Google</Biko>
</WebSite>
</SiteList>
XML定義用のクラス
[CollectionDataContract(Name = "SiteList")]
public class SiteList : List
{
}
[DataContract(Name = "WebSite")]
public class Site
{
[DataMember(Name = "Name", Order=1)]
public string Name;
[DataMember(Name = "URL", Order = 2)]
public string Url;
[DataMember(Name = "UserID", Order = 3)]
public string UserId;
[DataMember(Name = "Pass", Order = 4)]
public string Pass;
[DataMember(Name = "Biko", Order = 5)]
public string Biko;
}
XMLの読み込み→クラス化
using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create("WebSite.xml"))
{DataContractSerializer ds = new DataContractSerializer(typeof(SiteList));
SiteList sites= (SiteList)ds.ReadObject(reader, true);
string outPut = "";
foreach (Site s in sites)
{
outPut += s.Name + System.Environment.NewLine;
outPut += s.Url + System.Environment.NewLine;
outPut += s.UserId + System.Environment.NewLine;
outPut += s.Pass + System.Environment.NewLine;
outPut += s.Biko + System.Environment.NewLine;outPut += System.Environment.NewLine;
}MessageBox.Show(outPut);
}
クラス→XML書き込みの場合
Site yahoo = new Site { Name = "yahoo!", Url = "http://www.yahoo.co.jp", UserId = "yahooUser", Pass = "hogehoge", Biko = "ヤフーです。" };
Site google = new Site { Name = "Google", Url = "http://www.google.co.jp", UserId = "googleUser", Pass = "hogehoge", Biko = "グーグルです。" };SiteList sites = new SiteList();
sites.Add(yahoo);
sites.Add(google);DataContractSerializer ds = new DataContractSerializer(typeof(SiteList));
using (Stream s = File.Create("WebSite.xml"))
{
ds.WriteObject(s, sites);
}MessageBox.Show("正常終了");