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 相关文章推荐
location.href 在IE6中不跳转的解决方法与推荐使用代码
Jul 08 Javascript
JS去除右边逗号的简单方法
Jul 03 Javascript
javascript通过className来获取元素的简单示例代码
Jan 10 Javascript
JQuery EasyUI 数字格式化处理示例
May 05 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
Oct 15 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
Oct 16 Javascript
创建一般js对象的几种方式
Jan 19 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
Sep 30 Javascript
JS实现带动画的回到顶部效果
Dec 28 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
Vue 处理表单input单行文本框的实例代码
May 09 Javascript
Vuex模块化应用实践示例
Feb 03 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
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
Python爬取某平台短视频的方法
2021/02/08 Python
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
在线课程:Skillshare
2019/04/02 全球购物
证券期货行业个人的自我评价
2013/12/26 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
银行委托书范本
2014/04/04 职场文书
药剂专业自荐书
2014/06/20 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
捐款感谢信
2015/01/20 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
三好学生竞选稿
2015/11/21 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang