O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
.NET Framework での
XML形式へのシリアライズ
HIDARI(ひだり)
@HIDARI0415

13年10月15日火曜日
アプリケーションの状態を
保存したい

13年10月15日火曜日
アプリケーションの状態を
保存したい
(iniファイルという選択肢はないものとして)

13年10月15日火曜日
アプリケーションの状態を
保存したい
(iniファイルという選択肢はないものとして)
まあ順当に考えてXMLで

13年10月15日火曜日
アプリケーションの状態を
保存したい
(iniファイルという選択肢はないものとして)
まあ順当に考えてXMLで
System.Runtime.Seriarization.DataCont
ractSerializer

13年10月15日火曜日
DataContractSerializer
出力したい設定項目を集めたクラスを用意
public class hidari
{
public string Address { get; set; }
public int Age { get;...
public class hidari
{
public string Address { get; set; }
public int Age { get; set; }
}
var i = new hidari{Address="Osaka...
<hidari xmlns="http://schemas.datacontract.org/2004/07/_1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Address>Os...
DataContractSerializer
インデントしてくれないと編集できないじゃん

13年10月15日火曜日
DataContractSerializer
インデントしてくれないと編集できないじゃん
いや,手動で編集すんな

13年10月15日火曜日
DataContractSerializer
インデントしてくれないと編集できないじゃん
いや,手動で編集すんな
System.Xml.XmlWriterに
XmlWriterSettingsをセットして使いましょう

13年10月15日火曜日
var i = new hidari
{
Address = "Osaka",
Age = 27,
};
var serializer = new DataContractSerializer(typeof(hidari));
var fs =...
DataContractSerializer
デシリアライズしてみる

13年10月15日火曜日
DataContractSerializer
デシリアライズしてみる
-> ReadObjectメソッド

13年10月15日火曜日
DataContractSerializer
デシリアライズしてみる
-> ReadObjectメソッド
var serializer = new DataContractSerializer(typeof(hidari));
var fs =...
DataContractSerializer
デシリアライズしてみる
-> ReadObjectメソッド
var serializer = new DataContractSerializer(typeof(hidari));
var fs =...
DataContractSerializer
項目をネストさせてみましょう

public class hidari
{
public string Address { get; set; }
public int Age { get; set...
DataContractSerializer
項目をネストさせてみましょう
こんな感じで出力
<?xml version="1.0" encoding="utf-8"?>
<hidari xmlns:i="http://www.w3.org/2...
DataContractSerializer
名前空間が邪魔

13年10月15日火曜日
DataContractSerializer
名前空間が邪魔
<?xml version="1.0" encoding="utf-8"?>
<hidari xmlns:i="http://www.w3.org/2001/XMLSchema-in...
DataContractSerializer
名前空間が邪魔
<?xml version="1.0" encoding="utf-8"?>
<hidari xmlns:i="http://www.w3.org/2001/XMLSchema-in...
DataContractSerializer
名前空間が邪魔
DataContract属性とDataMember属性を

public class hidari
{
public string Address { get; set; }
pub...
DataContractSerializer
名前空間が邪魔
DataContract属性とDataMember属性を
NameSpace空にして
public class hidari
{
public string Address { ge...
DataContractSerializer
名前空間が邪魔
DataContract属性とDataMember属性を
NameSpace空にして
<?xml version="1.0" encoding="utf-8"?>
<hidari x...
DataContractSerializer
順番がアルファベットじゃイヤ!

13年10月15日火曜日
DataContractSerializer
順番がアルファベットじゃイヤ!
DataMember属性のOrderプロパティを
[DataContract(Namespace="")]
public class hidari
{
[DataMe...
DataContractSerializer
順番がアルファベットじゃイヤ!
DataMember属性のOrderプロパティを
[DataContract(Namespace="")]
public class hidari
{
[DataMe...
<?xml version="1.0" encoding="utf-8"?>
<hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Address>Osaka</Addres...
<?xml version="1.0" encoding="utf-8"?>
<hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Address>Osaka</Addres...
DataContractSerializer
順番を気にせず並べたい
コレクションなら…

13年10月15日火曜日
[DataContract(Namespace="")]
public class hidari
{
[DataMember(Order=3)]
public string Address { get; set; }
[DataMember(O...
<?xml version="1.0" encoding="utf-8"?>
<hidari xmlns:i="http://www.w3.org/2001/
XMLSchema-instance">
<Favorites>
<Favorite...
あとは…
必須項目と必須じゃない項目を作りたい

13年10月15日火曜日
あとは…
必須項目と必須じゃない項目を作りたい
バージョンアップで項目増えたり減ったりしたら
どうすんの?

13年10月15日火曜日
あとは…
必須項目と必須じゃない項目を作りたい
バージョンアップで項目増えたり減ったりしたら
どうすんの?
etc.

13年10月15日火曜日
詳しくはWebで
[データ コントラクトのバージョン管理]
(http://msdn.microsoft.com/ja-jp/
library/ms731138.aspx)
[ベスト プラクティス : データ コントラクト
のバージョン管理](...
5分間休憩
13年10月15日火曜日
Próximos SlideShares
Carregando em…5
×

Xmlシリアライズ

1.893 visualizações

Publicada em

2013/10/12(Sat)
「C#の素晴らしさを語る会」
@マイクロソフト 関西支店 (大阪)

Publicada em: Tecnologia, Turismo
  • Seja o primeiro a comentar

Xmlシリアライズ

  1. 1. .NET Framework での XML形式へのシリアライズ HIDARI(ひだり) @HIDARI0415 13年10月15日火曜日
  2. 2. アプリケーションの状態を 保存したい 13年10月15日火曜日
  3. 3. アプリケーションの状態を 保存したい (iniファイルという選択肢はないものとして) 13年10月15日火曜日
  4. 4. アプリケーションの状態を 保存したい (iniファイルという選択肢はないものとして) まあ順当に考えてXMLで 13年10月15日火曜日
  5. 5. アプリケーションの状態を 保存したい (iniファイルという選択肢はないものとして) まあ順当に考えてXMLで System.Runtime.Seriarization.DataCont ractSerializer 13年10月15日火曜日
  6. 6. DataContractSerializer 出力したい設定項目を集めたクラスを用意 public class hidari { public string Address { get; set; } public int Age { get; set; } } ファイルに書き込み -> WriteObjectメソッド 13年10月15日火曜日
  7. 7. public class hidari { public string Address { get; set; } public int Age { get; set; } } var i = new hidari{Address="Osaka", Age=27}; var serializer = new DataContractSerializer(typeof(hidari)); var fs = new FileStream(@".i.xml", FileMode.Create); serializer.WriteObject(fs, i); fs.Close(); 13年10月15日火曜日
  8. 8. <hidari xmlns="http://schemas.datacontract.org/2004/07/_1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Address>Osaka</Address><Age> でろーん 13年10月15日火曜日
  9. 9. DataContractSerializer インデントしてくれないと編集できないじゃん 13年10月15日火曜日
  10. 10. DataContractSerializer インデントしてくれないと編集できないじゃん いや,手動で編集すんな 13年10月15日火曜日
  11. 11. DataContractSerializer インデントしてくれないと編集できないじゃん いや,手動で編集すんな System.Xml.XmlWriterに XmlWriterSettingsをセットして使いましょう 13年10月15日火曜日
  12. 12. var i = new hidari { Address = "Osaka", Age = 27, }; var serializer = new DataContractSerializer(typeof(hidari)); var fs = new FileStream(@".i", FileMode.Create); var setting = new XmlWriterSettings(); setting.Indent = true; var xw = XmlWriter.Create(fs, setting); //var xw = XmlWriter.Create(fs, new XmlWriterSettings { Indent = true }); serializer.WriteObject(xw, i); xw.Close(); fs.Close(); <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/_2"> <Address>Osaka</Address> <Age>27</Age> </hidari> 13年10月15日火曜日
  13. 13. DataContractSerializer デシリアライズしてみる 13年10月15日火曜日
  14. 14. DataContractSerializer デシリアライズしてみる -> ReadObjectメソッド 13年10月15日火曜日
  15. 15. DataContractSerializer デシリアライズしてみる -> ReadObjectメソッド var serializer = new DataContractSerializer(typeof(hidari)); var fs = new FileStream(@"./i.xml", FileMode.Open); var value = (hidari)serializer.ReadObject(fs); fs.Close(); <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchemainstance" xmlns="http://schemas.datacontract.org/2004/07/ ConsoleApplication7"> <Address>Osaka</Address> <Age>27</Age> </hidari> 13年10月15日火曜日
  16. 16. DataContractSerializer デシリアライズしてみる -> ReadObjectメソッド var serializer = new DataContractSerializer(typeof(hidari)); var fs = new FileStream(@"./i.xml", FileMode.Open); var value = (hidari)serializer.ReadObject(fs); fs.Close(); やってみましょう 13年10月15日火曜日 <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchemainstance" xmlns="http://schemas.datacontract.org/2004/07/ ConsoleApplication7"> <Address>Osaka</Address> <Age>27</Age> </hidari>
  17. 17. DataContractSerializer 項目をネストさせてみましょう public class hidari { public string Address { get; set; } public int Age { get; set; } public Favorite Favorite { get; set; } } public class Favorite { public string Love { get; set; } } 13年10月15日火曜日 var i = new hidari { Address = "Osaka", Age = 27, Favorite = new Favorite { Love = "CSharp" } }; var serializer = new DataContractSerializer(typeof(hidari)); var fs = new FileStream(@".iLove.xml", FileMode.Create); var xw = XmlWriter.Create(fs, new XmlWriterSettings { Indent = true }); serializer.WriteObject(xw, i); xw.Close(); fs.Close();
  18. 18. DataContractSerializer 項目をネストさせてみましょう こんな感じで出力 <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ ConsoleApplication5"> <Address>Osaka</Address> <Age>27</Age> <Favorite> <Love>CSharp</Love> </Favorite> </hidari> 13年10月15日火曜日
  19. 19. DataContractSerializer 名前空間が邪魔 13年10月15日火曜日
  20. 20. DataContractSerializer 名前空間が邪魔 <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ConsoleApplication5"> <Address>Osaka</Address> <Age>27</Age> <Favorite> <Love>CSharp</Love> </Favorite> </hidari> 13年10月15日火曜日
  21. 21. DataContractSerializer 名前空間が邪魔 <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ConsoleApplication5"> <Address>Osaka</Address> <Age>27</Age> <Favorite> <Love>CSharp</Love> </Favorite> </hidari> 13年10月15日火曜日
  22. 22. DataContractSerializer 名前空間が邪魔 DataContract属性とDataMember属性を public class hidari { public string Address { get; set; } public int Age { get; set; } public Favorite Favorite { get; set; } } public class Favorite { public string Love { get; set; } } 13年10月15日火曜日 [DataContract(Namespace="")] public class hidari { [DataMember] public string Address { get; set; } [DataMember] public int Age { get; set; } [DataMember] public Favorite Favorite { get; set; } } [DataContract(Namespace="")] public class Favorite { [DataMember] public string Love { get; set; } }
  23. 23. DataContractSerializer 名前空間が邪魔 DataContract属性とDataMember属性を NameSpace空にして public class hidari { public string Address { get; set; } public int Age { get; set; } public Favorite Favorite { get; set; } } public class Favorite { public string Love { get; set; } } 13年10月15日火曜日 [DataContract(Namespace="")] public class hidari { [DataMember] public string Address { get; set; } [DataMember] public int Age { get; set; } [DataMember] public Favorite Favorite { get; set; } } [DataContract(Namespace="")] public class Favorite { [DataMember] public string Love { get; set; } }
  24. 24. DataContractSerializer 名前空間が邪魔 DataContract属性とDataMember属性を NameSpace空にして <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Address>Osaka</Address> <Age>27</Age> <Favorite> <Love>CSharp</Love> </Favorite> </hidari> 13年10月15日火曜日
  25. 25. DataContractSerializer 順番がアルファベットじゃイヤ! 13年10月15日火曜日
  26. 26. DataContractSerializer 順番がアルファベットじゃイヤ! DataMember属性のOrderプロパティを [DataContract(Namespace="")] public class hidari { [DataMember] public string Address { get; set; } [DataMember] public int Age { get; set; } [DataMember] public Favorite Favorite { get; set; } } 13年10月15日火曜日 [DataContract(Namespace="")] public class hidari { [DataMember(Order=3)] public string Address { get; set; } [DataMember(Order=2)] public int Age { get; set; } [DataMember(Order=1)] public Favorite Favorite { get; set; } }
  27. 27. DataContractSerializer 順番がアルファベットじゃイヤ! DataMember属性のOrderプロパティを [DataContract(Namespace="")] public class hidari { [DataMember] public string Address { get; set; } [DataMember] public int Age { get; set; } [DataMember] public Favorite Favorite { get; set; } } 13年10月15日火曜日 [DataContract(Namespace="")] public class hidari { [DataMember(Order=3)] public string Address { get; set; } [DataMember(Order=2)] public int Age { get; set; } [DataMember(Order=1)] public Favorite Favorite { get; set; } }
  28. 28. <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Address>Osaka</Address> <Age>27</Age> <Favorite> <Love>CSharp</Love> </Favorite> </hidari> <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Favorite> <Love>CSharp</Love> </Favorite> <Age>27</Age> <Address>Osaka</Address> </hidari> 13年10月15日火曜日
  29. 29. <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Address>Osaka</Address> <Age>27</Age> <Favorite> <Love>CSharp</Love> </Favorite> </hidari> <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Favorite> <Love>CSharp</Love> </Favorite> <Age>27</Age> <Address>Osaka</Address> </hidari> 13年10月15日火曜日
  30. 30. DataContractSerializer 順番を気にせず並べたい コレクションなら… 13年10月15日火曜日
  31. 31. [DataContract(Namespace="")] public class hidari { [DataMember(Order=3)] public string Address { get; set; } [DataMember(Order=2)] public int Age { get; set; } [DataMember(Order=1)] public List<Favorite> Favorites { get; set; } } var i = new hidari { Address = "Osaka", Age = 27, Favorites = new List<Favorite> { new Favorite{Love = "CSharp" }, new Favorite{Love = ".NET Framework"}, new Favorite{Love = "Programming"} } }; 13年10月15日火曜日 <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/ XMLSchema-instance"> <Favorites> <Favorite> <Love>CSharp</Love> </Favorite> <Favorite> <Love>.NET Framework</Love> </Favorite> <Favorite> <Love>Programming</Love> </Favorite> </Favorites> <Age>27</Age> <Address>Osaka</Address> </hidari>
  32. 32. <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/ XMLSchema-instance"> <Favorites> <Favorite> <Love>CSharp</Love> </Favorite> <Favorite> <Love>.NET Framework</Love> </Favorite> <Favorite> <Love>Programming</Love> </Favorite> </Favorites> <Age>27</Age> <Address>Osaka</Address> </hidari> 13年10月15日火曜日 <?xml version="1.0" encoding="utf-8"?> <hidari xmlns:i="http://www.w3.org/2001/ XMLSchema-instance"> <Favorites> <Favorite> <Love>.NET Framework</Love> </Favorite> <Favorite> <Love>Programming</Love> </Favorite> <Favorite> <Love>CSharp</Love> </Favorite> </Favorites> <Age>27</Age> <Address>Osaka</Address> </hidari>
  33. 33. あとは… 必須項目と必須じゃない項目を作りたい 13年10月15日火曜日
  34. 34. あとは… 必須項目と必須じゃない項目を作りたい バージョンアップで項目増えたり減ったりしたら どうすんの? 13年10月15日火曜日
  35. 35. あとは… 必須項目と必須じゃない項目を作りたい バージョンアップで項目増えたり減ったりしたら どうすんの? etc. 13年10月15日火曜日
  36. 36. 詳しくはWebで [データ コントラクトのバージョン管理] (http://msdn.microsoft.com/ja-jp/ library/ms731138.aspx) [ベスト プラクティス : データ コントラクト のバージョン管理](http:// msdn.microsoft.com/ja-jp/library/ ms733832.aspx) 13年10月15日火曜日
  37. 37. 5分間休憩 13年10月15日火曜日

×