C#.NET序列化XML、JSON、二进制微软自带DLL与newtonsoft(json.net)
2015-06-20 18:01
1286 查看
序列化是将对象转换成另一种格式(XML、json、二进制byte[])
下面是使用Newtonsoft.Json.JsonConvert类的例子:
注意:如果有不需要序列化的字段,可以给该字段添加[JsonIgnore]标记。在Newtonsoft这个类库中对于日期的序列化有多种方式,可以类的DataTime成员添加上对应的标记,这样在进行序列化和反序列化时就会按照指定的方式进行,在本例中User类的CreateDate属性添加的属性是[JsonConverter(typeof(IsoDateTimeConverter))],而Birthday属性添加的属性是[JsonConverter(typeof(JavaScriptDateTimeConverter))],从序列化的结果可以看出来它们最终的表现形式并不一样。
该实例完整代码:
View Code
JSON序列化
.NET中有三种常用的JSON序列化的类,分别是:Newtonsoft.Json.JsonConvert类(推荐)
Newtonsoft.Json.JsonConvert类是非微软提供的一个JSON序列化和反序列的开源免费的类库(下载网址是:http://www.codeplex.com/json/),它提供了更灵活的序列化和反序列化控制,并且如果你的开发环境使用的是.NET Framework3.5及以后版本的话,你就可以使用Linq to JSON,这样一来面对一大段的数据不必一一解析,你可以使用Linq to JSON解析出你关心的那部分即可,非常方便。下面是使用Newtonsoft.Json.JsonConvert类的例子:
public static void JsonConvertDemo() { User user = new User { UserId = 1, UserName = "李刚", CreateDate = DateTime.Now.AddYears(-30), Birthday = DateTime.Now.AddYears(-50), Priority = Priority.BelowNormal, Salary = 5000 }; //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用 //JSON序列化 string result = JsonConvert.SerializeObject(user); Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length); //JSON反序列化 user = JsonConvert.DeserializeObject<User>(result); Console.WriteLine("使用JsonConvert反序列化后的结果:UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority); } public static void JsonConvertLinqDemo() { User user = new User { UserId = 1, UserName = "周公", CreateDate = DateTime.Now.AddYears(-8), Birthday = DateTime.Now.AddYears(-32), Priority = Priority.Lowest, Salary = 500, Urls = new List<string> { "http://zhoufoxcn.blog.51cto.com", "http://blog.csdn.net/zhoufoxcn" } }; //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用 //JSON序列化 string result = JsonConvert.SerializeObject(user); Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length); //使用Linq to JSON JObject jobject = JObject.Parse(result); JToken token = jobject["Urls"]; List<string> urlList = new List<string>(); foreach (JToken t in token) { urlList.Add(t.ToString()); } Console.Write("使用Linq to JSON反序列化后的结果:["); for (int i = 0; i < urlList.Count - 1;i++ ) { Console.Write(urlList[i] + ","); } Console.WriteLine(urlList[urlList.Count - 1] + "]"); }
注意:如果有不需要序列化的字段,可以给该字段添加[JsonIgnore]标记。在Newtonsoft这个类库中对于日期的序列化有多种方式,可以类的DataTime成员添加上对应的标记,这样在进行序列化和反序列化时就会按照指定的方式进行,在本例中User类的CreateDate属性添加的属性是[JsonConverter(typeof(IsoDateTimeConverter))],而Birthday属性添加的属性是[JsonConverter(typeof(JavaScriptDateTimeConverter))],从序列化的结果可以看出来它们最终的表现形式并不一样。
该实例完整代码:
//工作竞赛-课题发布-获取奖项列表 var getList_CompetitionPrize = function () { var par_edit = { 'OperID': MemberInfo.MemberID, //操作人ID 'CompetitionID': CompetitionInfo.ID, //我的工作ID }; GLOBAL.DataStore.DataHandle.postData({ url: _pagebase.ServiceURL, handler: 'Web_Task_perm', parame: '{fucid:"GetList_CompetitionPrize",data:"' + encodeURIComponent(encodeURIComponent(JSON.stringify(par_edit))) + '"}', success: function (result) { if (result.errcode === 0) { alert(JSON.stringify(result.data)) var mydata = {}; $.each(result.data, function (index, item) { if (!mydata[item["PrizeNO"]]) { mydata[item["PrizeNO"]] = []; } mydata[item["PrizeNO"]].push(item); }) var htmlPrize = ''; var _tempHtml = $("#temp_PrizeList").html(); $.each(mydata, function (index, item) { htmlPrize += '<h2>' + index + '</h2>'; for (var i = 0; i < item.length; i++) { var PrizeModel = item[i]; htmlPrize += _tempHtml.replaceData(PrizeModel); } }) document.querySelector('#div_prizelist').innerHTML = htmlPrize; } else { } } }); }
View Code
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/3d06042dd0b393ef394f5d7f286a128d.png)
相关文章推荐
- 背景渐变 兼容IE
- 多行文本超出 JS省略号...
- HTML页面交互(JavaScript、PHP)
- Javascript的一个生产PDF的库: unicode和中文问题的解决
- javascript的内置对象
- [LeetCode][JavaScript]Copy List with Random Pointer
- [转] js遍历 子节点 子元素
- JSON总结
- javascript基础知识--什么是构造函数?什么是实例化对象?
- Js数组的操作push,pop,shift,unshift等方法详细介绍
- 黑马day06 jsp之中文乱码&原理&解决方案
- js对象
- 黑马day06 jsp之page指令
- javascript基本包装类型
- JSONP基本概念
- js对象
- JS模块化编程
- JS闭包详解
- JS字符串方法总结整理
- JavaScript深入理解闭包