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 相关文章推荐
jQuery 注意事项 与原因分析
Apr 24 Javascript
DOM下的节点属性和操作小结
May 14 Javascript
node.js中Socket.IO的进阶使用技巧
Nov 04 Javascript
关于编写性能高效的javascript事件的技术
Nov 28 Javascript
21个JavaScript事件(Events)属性汇总
Dec 02 Javascript
jQuery中[attribute*=value]选择器用法实例
Dec 31 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
Mar 13 Javascript
JavaScript实现经纬度转换成地址功能
Mar 28 Javascript
浅谈webpack4.x 入门(一篇足矣)
Sep 05 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
Apr 30 Javascript
nuxt 路由、过渡特效、中间件的实现代码
Nov 06 Javascript
一篇文章了解正则表达式的替换技巧
Feb 24 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的一些小问题
2010/07/03 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
python 中的列表解析和生成表达式
2011/03/10 Python
Python脚本实现集群检测和管理功能
2015/03/06 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
python suds访问webservice服务实现
2020/06/26 Python
Python如何使用input函数获取输入
2020/08/06 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
移动通信行业实习自我鉴定
2013/09/28 职场文书
教师节活动主持词
2014/04/02 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL