【C#】配列のJSON型のデータをHttpWebRequestで取得する

MySQL+PHPのサイトにサクセスしてテーブルの情報を取得する処理をC#でするときの備忘録。

データは複数のレコードを配列で受け取るのでこんな感じ。

[JSON]
[
	{"ID":1,"name":"Yamada"},
	{"ID":2,"name":"Sato"},
	{"ID":3,"name":"suzuki"}
]

それをC#内で定義するとこうなる。

[C#]
	[DataContract]
	public class data
	{
		[DataMember(Name = "ID")]
		public int ID { get; set; }

		[DataMember(Name = "name")]
		public string name { get; set; }
	}

追加した定義

[C#]
using System.Net;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

まず、先に定義したdataクラスをList型で定義する。

[C#]
	List<data> da = new List<data>();

次にWEBから読み込んだStream型のデータを一旦StreamReaderでstring型に変換する。

[C#]
	string jsonText;

	HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
	HttpWebResponse res = (HttpWebResponse)req.GetResponse();

	Stream st = res.GetResponseStream();

	using (StreamReader sr = new StreamReader(st, Encoding.UTF8))
	{
		jsonText = sr.ReadToEnd();
	}

それからデータをMemoryStream型に変換し、dataクラスをlist型で定義したインスタンスに格納する。

[C#]
	using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText)))
	{
		DataContractJsonSerializer se = new DataContractJsonSerializer(typeof(List<data>));
		da = (List<data>)se.ReadObject(ms);

		・・・
	}

これで標準ライブラリで配列のJSON型のデータを取得できる。

ちなみにstream型からMemoryStream型への変換にcopyToメソッドを使用するとReadObject実行時にエラーが出る。

スポンサーリンク

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータがどう処理されているか知りたい方はこちらをお読みください