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


Posted in Javascript onDecember 19, 2013
 /// <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
            {
                return false;
            }
        }
}

使用Json时需要注意,服务器端拼凑生成Json字符串时,一定要注意把字符串用\"\"包裹,不然客户端接收时肯定会报错,根据Json字符串生成对象,是根据对应的名称赋值,多于或少于都不会报错.
Javascript 相关文章推荐
dess中一个简单的多路委托的实现
Jul 20 Javascript
javascript中style.left和offsetLeft的用法说明
Mar 07 Javascript
基于jquery实现放大镜效果
Aug 17 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
Dec 03 Javascript
JavaScript表单焦点自动切换代码
Jul 24 Javascript
JS简单获取及显示当前时间的方法
Aug 03 Javascript
判断颜色是否合法的正则表达式(详解)
May 03 Javascript
浅谈Node 调试工具入门教程
Mar 20 Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 Javascript
防止Layui form表单重复提交的实现方法
Sep 10 Javascript
JavaScript中遍历的十种方法总结
Dec 15 Javascript
Node与Python 双向通信的实现代码
Jul 16 Javascript
利用js(jquery)操作Cookie的方法说明
Dec 19 #Javascript
JQUERY dialog的用法详细解析
Dec 19 #Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
Dec 19 #Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
Dec 19 #Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
Dec 19 #Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
Dec 18 #Javascript
javascript中打印当前的时间实现思路及代码
Dec 18 #Javascript
You might like
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
Jquery ui css framework
2010/06/28 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
Vuex的热更替如何实现
2020/06/05 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
说一说Python logging
2016/04/15 Python
python ansible服务及剧本编写
2017/12/29 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
python字符串判断密码强弱
2020/03/18 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
教师实习自我鉴定
2013/12/18 职场文书
渡河少年教学反思
2014/02/12 职场文书
活动总结书
2014/05/08 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技