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 DOM事件模型的两件事
Jul 22 Javascript
jQuery实现可拖动的浮动层完整代码
May 27 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
js中创建对象的几种方式示例介绍
Jan 26 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
Jun 10 Javascript
javascript中checkbox使用方法简单实例演示
Nov 17 Javascript
JavaScript如何获取数组最大值和最小值
Nov 18 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
Apr 06 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
Dec 28 Javascript
Express URL跳转(重定向)的实现方法
Apr 07 Javascript
javascript计算对象长度的方法
Oct 25 Javascript
微信小程序实现点赞、取消点赞功能
Nov 02 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下连接mssql2005的代码
2011/01/17 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
javascript操作cookie
2017/01/17 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
ant design实现圈选功能
2019/12/17 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
python 调整图片亮度的示例
2020/12/03 Python
python字典与json转换的方法总结
2020/12/28 Python
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
P/Invoke是什么
2015/07/31 面试题
有关打架的检讨书
2014/01/25 职场文书
志愿者宣传口号
2014/06/17 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
Java实现多线程聊天室
2021/06/26 Java/Android