こんばんは。きわさです。
C#(Visual C#)でJSONを読み込む方法です。
まず参照設定で、.NET の System.Runtime.Serialization の追加が必要です。
また、下記が必要です。
1 2 | using System.Runtime.Serialization; using System.Runtime.Serialization.Json; |
では、いきます。
JSON用のclassを定義する
JSONをパースするためにJSON用のclassを作る必要があります。
以前の記事(PHPでリクエスト情報を取得する)で扱ったJSONを例にすると、下記のようなclassが必要になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | [DataContract] class RequestJson { [DataMember] public string status { get ; set ; } [DataMember] public Results results { get ; set ; } [DataContract] public class Results { [DataMember] public string uri { get ; set ; } [DataMember] public string method { get ; set ; } [DataMember] public string time { get ; set ; } [DataMember] public string query { get ; set ; } [DataMember] public string accept { get ; set ; } [DataMember] public string accept_charset { get ; set ; } [DataMember] public string accept_encoding { get ; set ; } [DataMember] public string sccept_language { get ; set ; } [DataMember] public string connection { get ; set ; } [DataMember] public string host { get ; set ; } [DataMember] public string referer { get ; set ; } [DataMember] public string user_agent { get ; set ; } [DataMember] public string remote_address { get ; set ; } } } |
このJSONには status と results のメンバがいます。
status は文字列なので、stringで定義します。
このとき普通のclassと違うのは、メンバ定義の直前に [DataMember] を記載するということです。
そして一方、results にはさらに複数のメンバがいます。なので、型は別途定義したResults クラスとします。class定義の直前には [DataContract] を記載します。
なので、Results クラス定義の前と、全体を含む RequestJson クラス定義の前にも記載します。
こうして全てのメンバを記載します。
文字列をJSONオブジェクトにパースする
パースする処理です。
1 2 3 4 5 6 7 8 9 10 11 12 | static RequestJson getJson( string text) { RequestJson json; // シリアライザ var serializer = new DataContractJsonSerializer( typeof (RequestJson)); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(text))) { // JSONデシリアライズ json = (RequestJson)serializer.ReadObject(ms); } return json; } |
json用のclassを渡してシリアライザのオブジェクトを生成します。
そして文字列をストリームに読み込み、さらにシリアライザで読み込みます。
これでパースは完了で、jsonオブジェクトが取得できます。
あとは json.status や json.results.uri というように各メンバにアクセスできます。