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実行時にエラーが出る。

