.netでjsonを解析するDataContractJsonSerializerクラス
jsonは軽量級のテキスト転送フォーマットであり、一般的にフロントとバックグラウンドのデータ交換に用いられる.
DataContractJsonSerializerはfm 3.5の中でjsonのシーケンス化と逆シーケンス化に特化したクラスで、以下はDataContractJsonSerializerの簡単な応用である.
クライアントにjsonオブジェクトがあると仮定し,ajaxを介してバックグラウンドに転送し,バックグラウンド解析を行う.
コードは次のとおりです.
toJSOnString関数は正常にjsonを参照して実行されます.js
バックグラウンドコード:
新しいテストクラスtestobj(testobjの属性とクライアントから渡された一致)
新規シーケンス化と逆シーケンス化の方法
呼び出し:
逆シーケンス化json(解析)注:peopleはクライアントから渡されます
シーケンス化json文字列
フロントはバックグラウンドから返されるjson文字列を取得します.
DataContractJsonSerializerはfm 3.5の中でjsonのシーケンス化と逆シーケンス化に特化したクラスで、以下はDataContractJsonSerializerの簡単な応用である.
クライアントにjsonオブジェクトがあると仮定し,ajaxを介してバックグラウンドに転送し,バックグラウンド解析を行う.
コードは次のとおりです.
var people = [{ "UserName": "t1", "PassWord": "111111", "Sex": " " },{ "UserName": "t2", "PassWord": "222222", "Sex": " " }];
var url = "Default.aspx?people=" + escape(people.toJSONString());
request.open("POST", url, true);
request.onreadystatechange = updatePage;
request.send(null);
toJSOnString関数は正常にjsonを参照して実行されます.js
バックグラウンドコード:
新しいテストクラスtestobj(testobjの属性とクライアントから渡された一致)
[DataContract]//
public class TestObj
{
[DataMember]
public string UserName { get; set; }
[DataMember]
public string PassWord { get; set; }
[DataMember]
public string Sex { get; set; }
public TestObj(string u,string p,string s)
{
UserName = u;
PassWord = p;
Sex = s;
}
}
新規シーケンス化と逆シーケンス化の方法
//json
public static string ToJsJson(object item)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
using(MemoryStream ms=new MemoryStream())
{
serializer.WriteObject(ms, item);
StringBuilder sb = new StringBuilder();
sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
return sb.ToString();
}
}
//
public static T FromJsonTo<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
T jsonObject = (T)ser.ReadObject(ms);
return jsonObject;
}
}
呼び出し:
逆シーケンス化json(解析)注:peopleはクライアントから渡されます
// json
string jsonStr = Request["people"];
List<TestObj> obj = Json.FromJsonTo<List<TestObj>>(jsonStr);
foreach (TestObj item in obj)
{
Response.Write(string.Format("UserName:{0},Password:{1},Sex:{2}/r/n", item.UserName, item.PassWord, item.Sex));
}
Response.End();
シーケンス化json文字列
List<TestObj> Users = new List<TestObj>();
Users.Add(new TestObj("t1", "1", " "));
Users.Add(new TestObj("t2", "2", " "));
string json = Json.ToJsJson(Users);
Response.Write(json);
Response.End();
フロントはバックグラウンドから返されるjson文字列を取得します.
function updatePage() {
if (request.readyState == 4) {
if (request.status == 200) {
var response = request.responseText;
//
// 1
response = response.parseJSON();
// 2
// response = eval("(" + response + ")");
//
document.getElementById("d1").innerHTML = response[1].Sex;
//
// document.getElementById("d1").innerHTML = response;
}
}
}