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 base64编码实现代码
Dec 02 Javascript
举例详解JavaScript中Promise的使用
Jun 24 Javascript
JavaScript基本语法学习教程
Jan 14 Javascript
如何制作幻灯片(代码分享)
Jan 06 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
Mar 31 Javascript
AngularJS路由删除#符号解决的办法
Sep 28 Javascript
vue.js 获取select中的value实例
Mar 01 Javascript
浅谈angularJS2中的界面跳转方法
Aug 31 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
Oct 15 Javascript
vue el-table实现自定义表头
Dec 11 Javascript
ES6 Object.assign()的用法及其使用
Jan 18 Javascript
javascript实现图片轮换动作方法
Aug 07 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实现ftp上传文件示例
2014/08/21 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
初中物理教学反思
2014/01/14 职场文书
网络书店创业计划书
2014/02/07 职场文书
大学毕业感言50字
2014/02/07 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
单位收入证明范本
2015/06/18 职场文书
网吧温馨提示
2015/07/17 职场文书
初中军训感想
2015/08/07 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
利用Python+OpenCV三步去除水印
2021/05/28 Python
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS