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 验证表单(form)中的单选(radio)值
Sep 08 Javascript
PageSwitch插件实现100种不同图片切换效果
Jul 28 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
Aug 12 Javascript
基于jQuery实现选取月份插件附源码下载
Dec 28 Javascript
javascript 判断页面访问方式电脑或者移动端
Sep 19 Javascript
vue2.x+webpack快速搭建前端项目框架详解
Nov 30 Javascript
tween.js缓动补间动画算法示例
Feb 13 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
Apr 17 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
May 02 Javascript
vuex直接赋值的三种方法总结
Sep 16 Javascript
layui实现多图片上传并限制上传的图片数量
Sep 26 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
Sep 04 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 三维饼图的实现代码
2008/09/28 PHP
php制作中间带自己定义图片二维码的方法
2014/01/27 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
英语专业学子个人的自我评价
2013/10/02 职场文书
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
支部书记四风对照材料
2014/08/28 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
班主任自我评价范文
2015/03/11 职场文书
表扬信格式模板
2015/05/05 职场文书
离婚律师函范本
2015/05/27 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS