您的位置:首页 > Web前端 > JavaScript

C#.NET序列化XML、JSON、二进制微软自带DLL与newtonsoft(json.net)

2015-06-20 18:01 1286 查看
序列化是将对象转换成另一种格式(XML、json、二进制byte[])

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: