.netでjsonを解析するDataContractJsonSerializerクラス


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;   
              }  
          }  
      }