DataContractを使って、XMLファイルをクラスに変換

XMLファイルの読み込み→クラスの作成を楽にできる方法があったのでメモ

1 XML定義ファイルを用意する

2 XML定義にあった形でクラスを宣言

3 XMLを読み込んでクラスへと変換

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("正常終了");