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打印网页部分内容的脚本
Nov 17 Javascript
搞定immutable.js详细说明
May 02 Javascript
js实现可键盘控制的简单抽奖程序
Jul 13 Javascript
Javascript基础回顾之(三) js面向对象
Jan 31 Javascript
使用vue.js编写蓝色拼图小游戏
Mar 17 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
Mar 28 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
Mar 31 Javascript
vue 的 solt 子组件过滤过程解析
Sep 07 Javascript
OpenLayers3实现图层控件功能
Sep 25 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
11个Javascript小技巧帮你提升代码质量(小结)
Dec 28 Javascript
一篇文章看懂JavaScript中的回调
Jan 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中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
js string 转 int 注意的问题小结
2013/08/15 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
网络体系结构及协议的定义
2014/03/13 面试题
医学院校毕业生自荐信范文
2014/01/01 职场文书
婚礼主持结束词
2014/03/13 职场文书
成绩报告单家长评语
2014/12/30 职场文书
保送生自荐信
2015/03/06 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
搬迁通知
2015/04/20 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
早恋主题班会
2015/08/14 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫