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 append() html时的小问题的解决方法
Dec 16 Javascript
jQuery对表单元素的取值和赋值操作代码
May 19 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
Aug 09 Javascript
jquery ajax双击div可直接修改div中的内容
Mar 04 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
May 27 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
求js数组的最大值和最小值的四种方法
Mar 03 Javascript
vue2.0 datepicker使用方法
Feb 04 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 Javascript
webpack的pitching loader详解
Sep 23 Javascript
在vue中实现echarts随窗体变化
Jul 27 Javascript
js实现拖拽元素选择和删除
Aug 25 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 JSON格式数据交互实例代码详解
2011/01/13 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
python和pyqt实现360的CLable控件
2014/02/21 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
浅谈Python的list中的选取范围
2018/11/12 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
党员的自我评价范文
2014/01/02 职场文书
家教广告词
2014/03/19 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
python tkinter实现定时关机
2021/04/21 Python