こんばんは。きわさです。
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 というように各メンバにアクセスできます。
