您现在的位置: 万盛学电脑网 >> 程序编程 >> 脚本专题 >> javascript >> 正文

Json序列化和反序列化方法解析

作者:佚名    责任编辑:admin    更新时间:2022-06-22

 本篇文章主要是对Json序列化和反序列化方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助

 代码如下:  /// <summary>         /// Json序列化,用于发送到客户端         /// </summary>         public static string ToJsJson(this 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();               }           }           /// <summary>         /// Json反序列化,用于接收客户端Json后生成对应的对象         /// </summary>         public static T FromJsonTo<T>(this string jsonString)         {               DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));               MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));               T jsonObject = (T)ser.ReadObject(ms);               ms.Close();               return jsonObject;           }      实体类 代码如下:     [DataContract]     public class TestObj     {         [DataMember]         public string make { get; set; }         [DataMember]         public string model { get; set; }         [DataMember]         public int year { get; set; }         [DataMember]         public string color { get; set; }     }   ------------------javascript获取Json--------------------   javascript调用测试代码    代码如下: $('#getJson').click(function() {                 $.ajax({                     url: "getJsonHandler.ashx",                     type: 'GET',                     data: {},                     dataType: 'json',                     timeout: 1000,                     error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus) },                     success: function(result) {                           alert(result.make);                         alert(result.model);                         alert(result.year);                         alert(result.color);                     }                   });             });     C#后台生成代码 代码如下: public class getJsonHandler: IHttpHandler     { public void ProcessRequest(HttpContext context)         {             TestObj obj = new TestObj();               obj.make = "Make is Value";             obj.model = "Model is Value";             obj.year = 999;             obj.color = "Color is Value";               context.Response.Write(obj.ToJsJson());         }  public bool IsReusable         {             get             {                 return false;             }         } }   //返回值为 {"color":"Color is Value","make":"Make is Value","model":"Model is Value","year":999}     -----------------C#由Json生成对象-----------------------   javascript调用测试代码    代码如下:            $('#postJson').click(function() {                   var m_obj = { make: "Dodge", model: "Coronet R/T", year: 1968, color: "yellow" };                 var jsonStr = JSON.stringify(m_obj); //用Json2.js生成Json字符串                   $.ajax({                     url: "postJsonHandler.ashx",                     type: 'POST',                     data: { postjson: jsonStr },                     dataType: 'json',                     timeout: 1000,                     error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus) },                     success: function(result) {                           alert(result.success);                     }                   }); });     C#后台生成代码 代码如下: public class postJsonHandler: IHttpHandler     {         public void ProcessRequest(HttpContext context)         {             string jsonStr = context.Request["postjson"];               TestObj obj = jsonStr.FromJsonTo<TestObj>();               if (string.IsNullOrEmpty(obj.make) || string.IsNullOrEmpty(obj.model) || string.IsNullOrEmpty(obj.color)    || obj.year < 0)             {                 context.Response.Write("{success:false}");             }             else             {                 context.Response.Write("{success:true}");             }   public bool IsReusable         {             get           &nbs