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 相关文章推荐
javascript修改图片src的方法
Jan 27 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
Apr 13 Javascript
九种原生js动画效果
Nov 11 Javascript
js中遍历Map对象的方法
Jul 27 Javascript
JS弹出窗口的运用与技巧大全
Nov 01 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
Nov 24 Javascript
详解webpack和webpack-simple中如何引入css文件
Jun 28 Javascript
这样回答继承可能面试官更满意
Dec 10 Javascript
JS实现关闭小广告特效
Jan 29 Javascript
js实现百度登录窗口拖拽效果
Mar 19 Javascript
vue ref如何获取子组件属性值
Mar 31 Vue.js
前端JS获取URL参数的4种方法总结
Apr 05 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
用PHP制作静态网站的模板框架(四)
2006/10/09 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
jQuery的基本概念与高级编程
2015/05/14 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
python使用opencv读取图片的实例
2017/08/17 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
Python json转字典字符方法实例解析
2020/04/13 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
学期自我评价
2014/01/27 职场文书
具结保证书范本
2015/05/11 职场文书
健康证明
2015/06/19 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
导游词之无锡古运河
2019/11/14 职场文书
golang json数组拼接的实例
2021/04/28 Golang
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
基于Python实现一个春节倒计时脚本
2022/01/22 Python
详解SQL报错盲注
2022/07/23 SQL Server