C#:JSONのゴリゴリ!

何やら、DynamicJSONが使えるってらしい。
とりあえずメモ
usingに追加
using System.IO;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Web.Script.Serialization

データコントラクト定義
[DataContract]
public class RequestResult
{
[DataMember]
public string data1 { get; set; }
[DataMember]
public string data2 { get; set; }
[DataMember]
public string data3 { get; set; }
[DataMember]
public string data4 { get; set; }
}

実処理
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(“http://example.com/api/hoge”);
req.ContentType = “application/json”;
req.Method = “POST”;

using (var streamWriter = new StreamWriter(req.GetRequestStream()))
{
string jsonPayload = new JavaScriptSerializer().Serialize(new
{
hoge = “APIを”,
piyo = “叩く際に渡す”,
foo = “パラメータ”
});
streamWriter.Write(jsonPayload);
}

HttpWebResponse res = (HttpWebResponse)req.GetResponse();
RequestResult result;
using (res)
{
using (var resStream = res.GetResponseStream())
{
var serializer = new DataContractJsonSerializer(typeof(RequestResult));
result = (RequestResult)serializer.ReadObject(resStream);
}
}

csharp-class-serialize-deserialize-json-format-01
別な参考例

ID欄のテキストボックス: textBox_ID
Name欄のテキストボックス: textBox_Name
Output欄のテキストボックス: textBox_Output
Serializeボタン: button1
DeSerializeボタン: button2
Clearボタン: button3

using System.Runtime.Serialization.Json;
シリアライズのクラスを参照。
プロジェクトの[参照設定]にもSystem.Runtime.Serializationアセンブリの参照を追加。

シリアライズするクラス(InfoClass)に
[System.Runtime.Serialization.DataContract]
を記述しDataContract属性を付与します。

また、クラスのプロパティに
[System.Runtime.Serialization.DataMember()]
を記述し、DataMember属性を付与します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Json;

namespace JsonSerializeDemo
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(InfoClass));

InfoClass infoc = new InfoClass();
infoc.ID = Convert.ToInt32(textBox_ID.Text);
infoc.Name = textBox_Name.Text;

MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, infoc);
string JsonString = Encoding.UTF8.GetString(ms.ToArray());

textBox_Output.Text = JsonString;

}

private void button2_Click(object sender, EventArgs e)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(InfoClass));

byte[] bytes = Encoding.UTF8.GetBytes(textBox_Output.Text);
MemoryStream ms = new MemoryStream(bytes);
InfoClass infoc = (InfoClass)serializer.ReadObject(ms);

textBox_ID.Text = Convert.ToString(infoc.ID);
textBox_Name.Text = infoc.Name;
}

private void button3_Click(object sender, EventArgs e)
{
textBox_ID.Text = “”;
textBox_Name.Text = “”;
}
}
}

using節に
using System.Runtime.Serialization.Json;
を追加し、シリアライズのクラスを参照できるようにします。プロジェクトの[参照設定]にもSystem.Runtime.Serializationアセンブリの参照を追加します。
解説button1
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(InfoClass));
にてシリアライザのインスタンスを作成します。

InfoClass infoc = new InfoClass();
infoc.ID = Convert.ToInt32(textBox_ID.Text);
infoc.Name = textBox_Name.Text;
にて、情報格納クラスのインスタンスを作成しメンバ(プロパティ)に値を代入します。

MemoryStream ms = new MemoryStream();
にて、シリアライズした情報を格納するメモリストリームを準備します。

serializer.WriteObject(ms, infoc);
シリアライザーのWriteObjectメソッドを用いてシリアライズします。シリアライズされたデータは先に準備したメモリストリームに書き込まれます。

string JsonString = Encoding.UTF8.GetString(ms.ToArray());
メモリストリームからデータを読み出しUTF8にエンコードして文字列を取得します。

コメントを残す

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