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 相关文章推荐
onmouseover和onmouseout的一些问题思考
Aug 14 Javascript
JS截取字符串常用方法详细整理
Oct 28 Javascript
js清空form表单中的内容示例
May 20 Javascript
javascript中eval和with用法实例总结
Nov 30 Javascript
微信小程序 解析网页内容详解及实例
Feb 22 Javascript
详解使用vuex进行菜单管理
Dec 21 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
Mar 03 Javascript
webpack源码之loader机制详解
Apr 06 Javascript
在vue项目中,将juery设置为全局变量的方法
Sep 25 Javascript
Vue运用transition实现过渡动画
May 06 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
Mar 10 Javascript
小程序自定义弹框效果
Nov 16 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/03/15 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
php排序算法实例分析
2016/10/17 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
Python Socket编程入门教程
2014/07/11 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
Python中的pack和unpack的使用
2018/03/12 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
关于学习的演讲稿
2014/05/10 职场文书
另类冲刺标语
2014/06/24 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
2015年科室工作总结
2015/04/10 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL