Windows Phone 7でJson.NETを使う
Json.NETはここからダウンロード。CodePlex Archive
解凍してBin/DotNet/Newtonsoft.Json.Silverlight.dllを参照に追加すれば利用できます。
Windows Phone 7ではWebAPIから返るJsonを受け取るときに利用したり、データを保存するときにオブジェクトをJsonに変換して保存し、読み込むときにはJsonをオブジェクトに変換して利用できます。
ついでにJson.NETについて
Json.NETでできることは大きく分けて3つ。
以下はそのサンプルです。それぞれの用途を簡単に示しています。
using System; using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Json { class Program { class プログラミング言語 { public string 名前 { get; set; } public string 設計者 { get; set; } public List<string> 影響を受けた言語 { get; set; } } // まずは先にデータを作っておきます private static readonly List<プログラミング言語> list = new List<プログラミング言語>() { new プログラミング言語(){ 名前 = "C#", 設計者 = "Microsoft", 影響を受けた言語 = new List<string>() { "Java", "C++", "Modula-3", "Object Pascal" } }, new プログラミング言語(){ 名前 = "Ruby", 設計者 = "まつもと ゆきひろ", 影響を受けた言語 = new List<string>() { "Smalltalk", "Perl", "Lisp", "Scheme", "Python", "CLU", "Eiffel", "Ada", "Dylan" } } }; static void Main(string[] args) { // 1.Serialize(オブジェクト→Json文字列) // 先ほど作ったデータをシリアライズ string serializedString = JsonConvert.SerializeObject(list); Console.WriteLine(serializedString); // ⇒ //[ //{"名前":"C#","設計者":"Microsoft","影響を受けた言語":["Java","C++","Modula-3","Object Pascal"]}, //{"名前":"Ruby","設計者":"まつもと ゆきひろ","影響を受けた言語":["Smalltalk","Perl","Lisp","Scheme","Python","CLU","Eiffel","Ada","Dylan"]} //] // ※ListはJsonの配列に変換される // 2.Deserialize(Json文字列→オブジェクト) // シリアライズされた文字列を逆シリアル化 var deserializedList = JsonConvert.DeserializeObject<List<プログラミング言語>>(serializedString); Console.WriteLine(deserializedList[0].名前); // ⇒ C# Console.WriteLine(deserializedList[0].設計者); // ⇒ Microsoft Console.WriteLine(deserializedList[0].影響を受けた言語[0]); // ⇒ Java Console.WriteLine(deserializedList[1].名前); // ⇒ Ruby Console.WriteLine(deserializedList[1].設計者); // ⇒ まつもと ゆきひろ Console.WriteLine(deserializedList[1].影響を受けた言語[0]); // ⇒ Smalltalk // 3.Parse // Jsonを操作したいときはこれを使います。 // 例)下記のようにa ⇒ b ⇒ プログラミング言語があるときに // プログラミング言語だけ(一部のデータだけ)を取り出したい string json = @"{ ""a"":{ ""b"": { ""名前"":""C++"",""設計者"":""Bjarne Stroustrup"",""影響を受けた言語"":[""C"",""Simula"",""Ada 83"",""ALGOL 68"",""CLU"",""ML""], } } }"; var jObject = JObject.Parse(json); var cppJsonObject = jObject["a"]["b"]; var cpp = JsonConvert.DeserializeObject<プログラミング言語>(cppJsonObject.ToString()); Console.WriteLine(cpp.名前); // ⇒ C++ Console.WriteLine(cpp.設計者); // ⇒ Bjarne Stroustrup Console.WriteLine(cpp.影響を受けた言語[0]); // ⇒ C } } }
その他にも、
- シリアライズするプロパティを設定する
- 日付のフォーマットを決定するコンバータを使う
- エラーが起こったときの挙動
などを設定することができます。
詳しくはこちらを。Introduction。英語のドキュメントですが分量はそれほど多くないので使う方は一度ご覧になることをお勧めします。