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