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 技巧大全(新手入门篇)
May 12 Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
Jun 23 Javascript
JSQL 批量图片切换的实现代码
May 05 Javascript
一个JQuery操作Table的代码分享
Mar 30 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
Jun 07 Javascript
微信小程序 定位到当前城市实现实例代码
Feb 23 Javascript
DVA框架统一处理所有页面的loading状态
Aug 25 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
May 23 jQuery
详解JSON和JSONP劫持以及解决方法
Mar 08 Javascript
uni-app 支持多端第三方地图定位的方法
Jan 03 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
Feb 04 jQuery
JavaScript编写开发动态时钟
Jul 29 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版国家代码、缩写查询函数代码
2011/08/14 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
浅谈PHP的反射API
2017/02/26 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python计算一个序列的平均值的方法
2015/07/11 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
python实现汽车管理系统
2018/11/30 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
德国自行车商店:Tretwerk
2019/06/21 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
出纳岗位职责模板
2013/11/27 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
金融事务专业求职信
2014/04/25 职场文书
敬老院标语
2014/06/27 职场文书
2014年转正工作总结
2014/11/08 职场文书
美丽的大脚观后感
2015/06/03 职场文书
师德培训心得体会2016
2016/01/09 职场文书
Python MNIST手写体识别详解与试练
2021/11/07 Python
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers