こんばんは。きわさです。
C#(Visual C#)でJSONを読み込む方法です。
まず参照設定で、.NET の System.Runtime.Serialization の追加が必要です。
また、下記が必要です。
using System.Runtime.Serialization; using System.Runtime.Serialization.Json;
では、いきます。
JSON用のclassを定義する
JSONをパースするためにJSON用のclassを作る必要があります。
以前の記事(PHPでリクエスト情報を取得する)で扱ったJSONを例にすると、下記のようなclassが必要になります。
[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オブジェクトにパースする
パースする処理です。
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 というように各メンバにアクセスできます。