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 相关文章推荐
JS的replace方法详细介绍
Nov 09 Javascript
浅谈javascript中字符串String与数组Array
Dec 31 Javascript
jQuery选择器源码解读(七):elementMatcher函数
Mar 31 Javascript
jQuery实现在列表的首行添加数据
May 19 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
Aug 24 Javascript
JS继承之借用构造函数继承和组合继承
Sep 07 Javascript
很棒的一组js图片轮播特效
Jan 12 Javascript
self.attachevent is not a function的解决方法
Apr 04 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
AngularJS实现tab选项卡的方法详解
Jul 05 Javascript
全站最详细的Vuex教程
Apr 13 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 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
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
初探nodeJS
2017/01/24 NodeJs
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
js图片上传的封装代码
2017/08/01 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
介绍一下Ruby的多线程处理
2013/02/01 面试题
十八大闭幕感言
2014/01/22 职场文书
企业消防安全制度
2014/02/02 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python
JavaScript实现简单的音乐播放器
2022/08/14 Javascript