如何用c#fastjson 反序列化化json

C#里面如何反序列化JSON字符串啊?
[问题点数:20分,结帖人rightmin]
C#里面如何反序列化JSON字符串啊?
[问题点数:20分,结帖人rightmin]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年4月 .NET技术大版内专家分月排行榜第二
2011年3月 .NET技术大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。[转载]Newtonsoft.Json&使用&C#序列号json,反序列化对象
Newtonsoft.Json 是.NET 下开源的json格式序列号和反序列化的类库.
官方网站:&
使用方法比较简单
1.首先下载你需要的版本,然后在应用程序中引用Newtonsoft.Json.dll 文件.
2.引用命名空间
3.为了更好的理解,C#环境下我创建了一个Person类
4.利用Newtonsoft.Json序列号强类型集合,所以首先初始化一个强类型集合(循环创建了10个Person添加到了list集合中)
5.初始化上面的list集合为 json 格式字符串
string serialStr =
JavaScriptConvert.SerializeObject(list);
下面截图可以看到 serialStr 已经把list序列号成json格式.
输出到页面后的json字符串
6.接着反序列化此json字符串为list强类型集合
代码: List listPerson = new List();
& & listPerson =
JavaScriptConvert.DeserializeObject&(serialStr);
断点处 监视 listPerson 集合,已经发现有10个Person对象,如下图
7.下面序列号和反序列化一个对象,我们这里以 list[0] 这个Person 为例子
代码:string serialOne =
JavaScriptConvert.SerializeObject(list[0]);
看断点截图此对象已经被序列号成json格式.
8.反序列化上面的serialOne 为Person对象
代码:Person p =
JavaScriptConvert.DeserializeObject(serialOne,typeof(Person)) as
从断点监视窗口可以看到 此字符串已经被反序列化成Person对象.
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。C# 中对象与Json互转的方法整理笔记
&&&&&&&& 原先一直做CS的开发,对Json了解不多,最近转做BS后,才接触到了Json。作为后台与前端页面数据交互的基础,Json的地位非常重要,自然而然Json转换方法的重要性也不言面喻。
最开始使用的是同事原来写好的对象转Json的方法,并没有什么问题,不过一次偶然的转换,让我发现这个方法的局限性。当时我尝试将一个包含List属性的对象转成Json,该对象的List属性中有若干个对象,本以为转出来的Json字符串会带着这个属性,同时带着List中的所有对象,可实际转换的结果却是该属性的值——Object。考虑到后面可能也会类似的情况要处理,我打算重写该方法一次性解决这个问题。不过粗略研究代码后却有些犯难,这部分代码涉及到反射和特性的知识,而我对这部分知识还不够了解,尝试了简单的改写后发现实现难度有些大,所以放弃了改写的想法。
既然改写难度大,那么是否可以使用C#自带类库中类和方法呢?抱着这个想法在网上搜到了使用System.Runtime.Serialization.Json命名空间中DataContractJsonSerializer类转换Json的方法。在测试中发现使用这种方法转换存在两个问题:第一,生成的Json字符串中,会将自动化属性包裹在&&k__BackingField的尖括号中,如属性”CreateTime”,转换后会变成”& CreateTime&k__BackingField”;第二,如果对象的属性中有时间类型,则会将该属性的值转换成\/Date(7+0800)\/类的格式,该格式中的数字是与日的毫秒数之差。解决第一个问题需要使用正则表达式查找替换,解决第二个问题不但需要正则表达式查找出那些数字,还要将其转换成时间。实现起来也很麻烦。
于是我又开始在网上寻找其他的解决方法,又发现使用System.Web.Script.Serialization命名空间下的JavaScriptSerializer也可以实现Json对象的互转。而且在测试中还发现使用这种方法不会将自动化属性被包裹在&&k__BackingField的尖括号中的问题,不过时间转换的问题依然存在。
如果C#自带类库中的类和方法无法方便的实现Json对象的互转,就只能求助于第三方类库了。JsonNet或说是NewtonSoft很快便吸引了我的注意。在测试的时候还出现了个小插曲,我使用从官方地址下载的压缩包中BIN目录下的Net4.0版本的库文件,在程序中执行到JsonConvert.SerializeObject方法的时候提示查找JsonConvert.cs文件。后来我打开源项目重新编译生成库文件后就能正常调用执行了。在测试中发现使用JsonConvert.SerializeObject默认的方法转换出来的Json字符串中,时间格式虽然不是我想要的,也属于格式化后的。接着继续在网上搜索是否有控制时间格式化的方法,终于找到了使用命名空间Newtonsoft.Json.Converters中的IsoDateTimeConverter类对象可以控制时间的格式化。另外测试了对象数组转Json和Json转对象及转对象数组的方法后,确认JsonNet适合使用。
另外在整理JsonNet实现代码的时候,意外发现了LitJson库,比较小巧,据说转换时的效率比较高。简单测试了一下发现它实现了时间默认格式的转换,不过不提供详细的控制,在这点上就不如JsonNet好。
个人感觉Json与对象的互转的技术实现关键在于反射和特性,待到有时间研究到这部分内容时再来深入分析、比较和学习。
以下收录了一些从网上找的解决对象与Json互转的方法,其中也包括处理时间格式化的几种方式,仅供备忘参考。
1&&&&解析Json的几种方法
原文地址:
内建LINQ支持
时间格式化支持
只能在Web环境使用
只能在Silverlight中使用
JsonMapper
1.1&&&&&&&&&准备数据
usingSystem.Runtime.S
namespace WindowsFormsApplication1
[DataContract]
public class Person
[DataMember(Order= 0, IsRequired =true)]
public string Name { }
[DataMember(Order= 1)]
public int Age { }
[DataMember(Order= 2)]
public bool Alive { }
[DataMember(Order= 3)]
public string[] FavoriteFilms { }
[DataMember(Order= 4)]
public Person Child { }
&&&&&&& Action&object& log = o =&Console.WriteLine(o);
&&&&&&& Func&int,int, int& add = (x, y) =& x +
&&&&&&& var p1 = newPerson
&&&&&&&&&&& Age = 12,
&&&&&&&&&&& Alive = true,
&&&&&&&&&&& Name = &lj&,
&&&&&&&&&&& FavoriteFilms = new[] {&Up&,&Avatar& }
&&&&&&& };
&&&&&&& var p2 = newPerson() { Age = 28, Name =&cy&, Child = p1 };
&&&&&&&&&&&&
1.2&&&&&&&&&使用DataContractJsonSerializer
&&& // usingSystem.Runtime.Serialization.J
&&& ///&summary&
&&& ///解析JSON,仿Javascript风格
&&& ///&/summary&
&&& public
static class JsonTool1
&&&&&&& public
static T parse&T&(stringjsonString)
&&&&&&&&&&& using(var ms =new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
&&&&&&&&&&& {
&&&&&&&&&&&&&&& return(T)newDataContractJsonSerializer(typeof(T)).ReadObject(ms);
&&&&&&&&&&& }
&&&&&&& public
static stringstringify(object jsonObject)
&&&&&&&&&&& using(var ms =new MemoryStream())
&&&&&&&&&&& {
&&&&&&&&&&&&&&& newDataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms,jsonObject);
&&&&&&&&&&&&&&& returnEncoding.UTF8.GetString(ms.ToArray());
&&&&&&&&&&& }
&&&// 序列化
&&&var jsonString = JSON.stringify(new[] { p1, p2 });
&&&log(jsonString == JSON.stringify(new List&Person&() { p1, p2}));&& //true
&&&log(jsonString);
&&&// 反序列化,泛型集合
&&&JSON.parse&List&Person&&(jsonString);
&&& // 数组转换&&&&&&&&&&&&
&&&JSON.parse&Person[]&(jsonString);
[{&Name&:&lj&,&Age&:12,&Alive&:true,&FavoriteFilms&:[&Up&,&Avatar&],&Child&:null
},{&Name&:&cy&,&Age&:28,&Alive&:false,&FavoriteFilms&:null,&Child&:{&Name&:&lj&,
&Age&:12,&Alive&:true,&FavoriteFilms&:[&Up&,&Avatar&],&Child&:null}}]
1.3&&&&&&&&&使用JavaScriptSerializer
&&&// using System.Web.Script.S
&&&var jser&&& = newJavaScriptSerializer();
&&&var json&&& = jser.Serialize(newList&Person&() { p1, p2 });
&&&var persons = jser.Deserialize&List&Person&&(json);
1.4&&&&&&&&&使用Silverlight
&&&// using System.Json
&&&var css = &{ /&#header/& :{background:/&red/&}, layout : [5,4,1],color:/&cyan/&}&;
&&&var style = JsonObject.Parse(css) as JsonO&&&&
&&&from s in style
&&&where s.Key == &color&
&&&select (string)s.Value
&&&).First().ToString();&&&&
&&&// &cyan&
&&&// 更多操作
&&&style[&layout&][0] = 22;
&&&var hd = style[&#header&];
&&&style[&body&div+p&] =
&&&style.Remove(&#header&);
&&&var bd = new JsonObject();
&&&bd[&border&] = &1px solid cyan&;
&&&style[&body&div+p&][&#meta&] =
&&&style.ToString();&&&&
&&&//{&layout&:[22,4,1],&color&:&cyan&,&body&div+p&:{&background&:&red&,&#meta&:{&border&:&1pxsolid cyan&}}}
1.5&&&&&&&&&使用JSON.NET
&&&// using Newtonsoft.J
&&&var json = JsonConvert.SerializeObject(new[] { p1, p2 });
&&&var persons =JsonConvert.DeserializeObject&List&Person&&(json);
&&&var ja = JArray.Parse(jsonString);&&&&&&&&&&&&
&&&log(ja);&&& //注意,格式化过的输出
&&&&Name&: &lj&,
&&&&Age&: 12,
&&&&Alive&: true,
&&&&FavoriteFilms&: [
&&&&&&Up&,
&&&&&&Avatar&
&&&&Child&: null
&&&&Name&: &cy&,
&&&&Age&: 28,
&&&&Alive&: false,
&&&&FavoriteFilms&: null,
&&&&Child&: {
&&&&&&Name&: &lj&,
&&&&&&Age&: 12,
&&&&&&Alive&: true,
&&&&&&FavoriteFilms&: [
&&&&&&&&Up&,
&&&&&&&&Avatar&
&&&&&&Child&: null
&&&var ageCount = ja.Select(j =& (int)j[&Age&]).Aggregate(add);&&&&
&&&var q = from j in ja
&&&&&&&&&&&where !j[&Name&].Value&string&().Equals(&lj&)
&&&&&&&&&&&select (int)j[&Age&];
&&&log(q.Aggregate(add) == ageCount);&//false
&&&// 与Linq to XML 相似的嵌套构造函数:
&&&var jo = new JObject(
&&&&&&&&&&&&&&&&&&& newJProperty(&age&, persons.Select( p =& p.Age)),
&&&&&&&&&&&&&&&&&&& newJProperty(&funny&, true),
&&&&&&&&&&&&&&&&&&& newJProperty(&array&, new JArray(new[] { 2, 4, 1 }))
&&&&&&&&&&&&&&&&&&& );
&&&log(jo);
&&&// JObject 操作
&&&var css = &{ /&#header/& :{background:/&red/&}, layout : [5,4,1] }&;
&&&var style = JObject.Parse(css);
&&&var bd = new JObject();
&&&bd[&color&] = &1px solid cyan&;
&&&style[&border&] =
&&&var hd = style[&#header&];
&&&style[&body&div+p&] =
&&&hd.Parent.Remove();
&&&style[&layout&][0] = 22;
&&&log(style);
&&&&&&age&: [
&&&&&&&12,
&&&&&&funny&: true,
&&&&&&array&: [
&&&&&&layout&: [
&&&&&&&22,
&&&&&&border&: {
&&&&&&&&color&: &1px solid cyan&
&&&&&&body&div+p&: {
&&&&&&&&background&: &red&
来自:/article.asp?id=1913
1.6&&&&&&&&&参考网上的例子自己实现的一个封装JsonNet的类,可控制时间的格式化
参考文章地址:
&&& ///&summary&
&&& ///主要使用了Newtonsoft.Json使用了对象与Json字符串之间的互转
&&& ///&/summary&
&&& public
class JsonToolEx
&&&&&&& public
static string ToJson(object obj,stringdateTimeFormat = &yyyy-MM-dd&)
&&&&&&&&&&& IsoDateTimeConvertertimeConverter =new IsoDateTimeConverter();
&&&&&&&&&&& timeConverter.DateTimeFormat =dateTimeF
&&&&&&&&&&& returnJsonConvert.SerializeObject(obj,timeConverter);
&&&&&&& public
static T ToObject&T&(stringjson)
&&&&&&&&&&& returnJsonConvert.DeserializeObject&T&(json);
1.7&&&&&&&&&使用LitJson
&&& public
class JsonToolLit
&&&&&&& public
static string ToJson(object obj)
&&&&&&&&&&& returnJsonMapper.ToJson(obj);
&&&&&&& public
static T ToObject&T&(stringjson)
&&&&&&&&&&& returnJsonMapper.ToObject&T&(json);
2&&&&解决json日期格式问题的3种方法
原文地址:
开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下所示:
复制代码代码如下:
//设置服务器响应的结果为纯文本格式
&&&&&&&&&&&context.Response.ContentType = &text/plain&;
&&&&&&&&&&//学生对象集合
&&&&&&&&&&&List&Student& students = new List&Student&
&&&&&&&&&&&{
&&&&&&&&&&&&&&& new Student(){Name =&Tom&,
&&&&&&&&&&&&&&&&&&& Birthday=Convert.ToDateTime(& 12:12:12&)},
&&&&&&&&&&&&&&& new Student(){Name=&Rose&,
&&&&&&&&&&&&&&&&&&& Birthday=Convert.ToDateTime(& 11:12:12&)},
&&&&&&&&&&&&&&& new Student(){Name=&Mark&,
&&&&&&&&&&&&&&&&&&& Birthday=Convert.ToDateTime(& 10:12:12&)}
&&&&&&&&&&&};
&&&&&&&&&&&//javascript序列化器
&&&&&&&&&&&JavaScriptSerializer jss=new JavaScriptSerializer();
&&&&&&&&&&//序列化学生集合对象得到json字符
&&&&&&&&&&&string studentsJson=jss.Serialize(students);
&&&&&&&&&&//将字符串响应到客户端
&&&&&&&&&&&context.Response.Write(studentsJson);
&&&&&&&&&&context.Response.End();
运行结果是:
其中Tom所对应生日“”变成了0,这其实是1970 年 1 月 1 日至今的毫秒数;0//24/365=44.11年,44+年,按这种方法可以得出年月日时分秒和毫秒。这种格式是一种可行的表示形式但不是普通人可以看懂的友好格式,怎么让这个格式变化?
解决办法:
2.1&&&&&&&&&在服务器端将日期格式使用Select方法或LINQ表达式转换后发到客户端:
using System.Collections.G
using System.W
using System.Web.Script.S
namespace JsonDate1
&&&using System.L
&&&/// &summary&
&&&/// 学生类,测试用
&&&/// &/summary&
&&&public class Student
&&&&&&&/// &summary&
&&&&&&&/// 姓名
&&&&&&&/// &/summary&
&&&&&&&public String Name { }
&&&&&&&/// &summary&
&&&&&&&/// 生日
&&&&&&&/// &/summary&
&&&&&&&public DateTime Birthday { }
&&&/// &summary&
&&&/// 返回学生集合的json字符
&&&/// &/summary&
&&&public class GetJson : IHttpHandler
&&&&&&&public void ProcessRequest(HttpContext context)
&&&&&&&&&&&//设置服务器响应的结果为纯文本格式
&&&&&&&&&&&context.Response.ContentType = &text/plain&;
&&&&&&&&&&&//学生对象集合
&&&&&&&&&&&List&Student& students = new List&Student&
&&&&&&&&&&&{
&&&&&&&&&&&&&&& new Student(){Name=&Tom&,Birthday =Convert.ToDateTime(& 12:12:12&)},
&&&&&&&&&&&&&&& new Student(){Name=&Rose&,Birthday =Convert.ToDateTime(&1:12:12&)},
&&&&&&&&&&&&&&& new Student(){Name=&Mark&,Birthday =Convert.ToDateTime(&0:12:12&)}
&&&&&&&&&&&};
&&&&&&&&&&&//使用Select方法重新投影对象集合将Birthday属性转换成一个新的属性
&&&&&&&&&&&//注意属性变化后要重新命名,并立即执行
&&&&&&&&&&&var studentSet =
&&&&&&&&&&&&&&& students.Select
&&&&&&&&&&&&&&& (
&&&&&&&&&&&&&&& p =& new { p.Name, Birthday= p.Birthday.ToString(&yyyy-mm-dd&) }
&&&&&&&&&&&&&&& ).ToList();
&&&&&&&&&&&//javascript序列化器
&&&&&&&&&&&JavaScriptSerializer jss = new JavaScriptSerializer();
&&&&&&&&&&&//序列化学生集合对象得到json字符
&&&&&&&&&&&string studentsJson = jss.Serialize(studentSet);
&&&&&&&&&&&//将字符串响应到客户端
&&&&&&&&&&&context.Response.Write(studentsJson);
&&&&&&&&&&&context.Response.End();
&&&&&&&public bool IsReusable
&&&&&&&&&&&get
&&&&&&&&&&&{
&&&&&&&&&&&&&&&
&&&&&&&&&&&}
Select方法重新投影对象集合将Birthday属性转换成一个新的属性,注意属性变化后要重新命名,属性名可以相同;这里可以使用select方法也可以使用LINQ查询表达式,也可以选择别的方式达到相同的目的;这种办法可以将集合中客户端不用的属性剔除,达到简单优化性能的目的。
运行结果:
这时候的日期格式就已经变成友好格式了,不过在javascript中这只是一个字符串。
2.2&&&&&&&&&方法二:在javascript处理
在javascript中将&Birthday&:&\/Date(0)\/&中的字符串转换成javascript中的日期对象,可以将Birthday这个Key所对应的Value中的非数字字符以替换的方式删除,到到一个数字0,然后实例化一个Date对象,将0毫秒作为参数,得到一个javascript中的日期对象,代码如下:
&!DOCTYPE html&
&htmlxmlns=&http://www.w3.org/1999/xhtml&&
&&&&title&json日期格式处理&/title&
&&&&script src=&Scripts/jquery-1.10.2.min.js&type=&text/javascript&&&/script&
&&&&script type=&text/javascript&&
&&&&&&&$(function() {
&&&&&&&&&&&$.getJSON(&getJson.ashx&, function (students) {
&&&&&&&&&&&&&&& $.each(students, function(index, obj) {
&&&&&&&&&&&&&&&&&&&$(&&li/&&).html(obj.Name).appendTo(&#ulStudents&);
&&&&&&&&&&&&&&&&&&& //使用正则表达式将生日属性中的非数字(\D)删除
&&&&&&&&&&&&&&&&&&& //并把得到的毫秒数转换成数字类型
&&&&&&&&&&&&&&&&&&& var birthdayMilliseconds =parseInt(obj.Birthday.replace(/\D/igm, &&));
&&&&&&&&&&&&&&&&&&& //实例化一个新的日期格式,使用1970 年 1 月 1 日至今的毫秒数为参数
&&&&&&&&&&&&&&&&&&& var birthday = newDate(birthdayMilliseconds);
&&&&&&&&&&&&&&&&&&&$(&&li/&&).html(birthday.toLocaleString()).appendTo(&#ulStudents&);;
&&&&&&&&&&&&&&& });
&&&&&&&&&&&});
&&&&&&&});
&&&&/script&
&&&&h2&json日期格式处理&/h2&
&&&&ul id=&ulStudents&&
运行结果:
上的使用正则/\D/igm达到替换所有非数字的目的,\D表示非数字,igm是参数,分别表示忽视(ignore)大小写;多次、全局(global)替换;多行替换(multi-line);有一些时候还会出现+86的情况,只需要变换正则同样可以达到目的。另外如果项目中反复出现这种需要处理日期格式的问题,可以扩展一个javascript方法,代码如下:
$(function () {
&&&&&&&&&&&$.getJSON(&getJson.ashx&, function (students) {
&&&&&&&&&&&&&&& $.each(students, function(index, obj) {
&&&&&&&&&&&&&&&&&$(&&li/&&).html(obj.Name).appendTo(&#ulStudents&);
&&&&&&&&&&&&&&&&& //使用正则表达式将生日属性中的非数字(\D)删除
&&&&&&&&&&&&&&&&&&& //并把得到的毫秒数转换成数字类型
&&&&&&&&&&&&&&&&&&& var birthdayMilliseconds =parseInt(obj.Birthday.replace(/\D/igm, &&));
&&&&&&&&&&&&&&&&& //实例化一个新的日期格式,使用1970 年 1 月 1 日至今的毫秒数为参数
&&&&&&&&&&&&&&&&&&& var birthday = newDate(birthdayMilliseconds);
&&&&&&&&&&&&&&&&& $(&&li/&&).html(birthday.toLocaleString()).appendTo(&#ulStudents&);
&&&&&&&&&&&&&&&&&$(&&li/&&).html(obj.Birthday.toDate()).appendTo(&#ulStudents&);
&&&&&&&&&&&&&&& });
&&&&&&&&&&&});
&&&&&&&});
&&&&&&&//在String对象中扩展一个toDate方法,可以根据要求完善
&&&&&&&String.prototype.toDate = function () {
&&&&&&&&&&&var dateM
&&&&&&&&&&&if (isNaN(this)) {
&&&&&&&&&&&&&&& //使用正则表达式将日期属性中的非数字(\D)删除
&&&&&&&&&&&&&&& dateMilliseconds=this.replace(/\D/igm, &&);
&&&&&&&&&&&} else {
&&&&&&&&&&&&&&& dateMilliseconds=
& &&&&&&&&&&}
&&&&&&&&&&&//实例化一个新的日期格式,使用1970 年 1 月 1 日至今的毫秒数为参数
&&&&&&&&&&&return new Date(parseInt(dateMilliseconds));
上面扩展的方法toDate不一定合理,也不够强大,可以根据需要修改。
2.3&&&&&&&&&方法三:选择一些第三方的json工具类
可以选择一些第三方的json工具类,其中不乏有一些已经对日期格式问题已处理好了的,常见的json序列化与反序列化工具库有:
1.fastJSON.
2.JSON_checker.
3.Jayrock.
4.Json.NET - LINQ to JSON.
5.LitJSON.
6.JSON for .NET.
8.JSONSharp.
9.JsonExSerializer.
10.fluent-json
11.Manatee Json
这里以litjson为序列化与反序列化json的工具类作示例,代码如下:
复制代码代码如下:
using System.Collections.G
using System.W
using LitJ
namespace JsonDate2
&&&using System.L
&&&/// &summary&
&&&/// 学生类,测试用
&&&/// &/summary&
&&&public class Student
&&&&&&&/// &summary&
&&&&&&&/// 姓名
&&&&&&&/// &/summary&
&&&&&&&public String Name { }
&&&&&&&/// &summary&
&&&&&&&/// 生日
&&&&&&&/// &/summary&
&&&&&&&public DateTime Birthday { }
&&&/// &summary&
&&&/// 返回学生集合的json字符
&&&/// &/summary&
&&&public class GetJson : IHttpHandler
&&&&&&&public void ProcessRequest(HttpContext context)
&&&&&&&&&&&//设置服务器响应的结果为纯文本格式
&&&&&&&&&&&context.Response.ContentType = &text/plain&;
&&&&&&&&&&&//学生对象集合
&&&&&&&&&&&List&Student& students = new List&Student&
&&&&&&&&&&&{
&&&&&&&&&&&&&&& new Student(){Name=&Tom&,Birthday =Convert.ToDateTime(&2:12:12&)},
&&&&&&&&&&&&&&& new Student(){Name=&Rose&,Birthday =Convert.ToDateTime(&1:12:12&)},
&&&&&&&&&&&&&&& new Student(){Name=&Mark&,Birthday =Convert.ToDateTime(&0:12:12&)}
&&&&&&&&&&&};
&&&&&&&&&&&//序列化学生集合对象得到json字符
&&&&&&&&&&&string studentsJson = JsonMapper.ToJson(students);
&&&&&&&&&&&//将字符串响应到客户端
&&&&&&&&&&&context.Response.Write(studentsJson);
&&&&&&&&&&&context.Response.End();
&&&&&&&public bool IsReusable
&&&&&&&&&&&get
&&&&&&&&&&&{
&&&&&&&&&&&&&&&
&&&&&&&&&&&}
运行结果如下:
这时候的日期格式就基本正确了,只要在javascript中直接实例化日期就好了,
var date = new Date(&01/31/:12&);
alert(date.toLocaleString());
客户端的代码如下:
复制代码代码如下:
$(function () {
&&&&&&&&&&&$.getJSON(&GetJson2.ashx&, function (students) {
&&&&&&&&&&&&&&& $.each(students, function(index, obj) {
&&&&&&&&&&&&&&&&&&&$(&&li/&&).html(obj.Name).appendTo(&#ulStudents&);
&&&&&&&&&&&&&&&&&&& var birthday = newDate(obj.Birthday);
&&&&&&&&&&&&&&&&&&&$(&&li/&&).html(birthday.toLocaleString()).appendTo(&#ulStudents&);
&&&&&&&&&&&&&&& });
&&&&&&&&&&&});
&&&&&&&});
&&&&&&&var date = new Date(&01/31/:12&);
&&&&&&&alert(date.toLocaleString());
本分类共有文章2篇,更多信息详见
& 2012 - 2014 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";
/*爱悠闲底部960*75*/
var cpro_id = "u1888128";8023人阅读
我们可以通过DataContractJsonSerializer类来序列化一个对象为json字符串
public class JsonConvert&T&
public static string ObjectToJson(T obj)
var serializer = new DataContractJsonSerializer(typeof(T));
var stream = new MemoryStream();
serializer.WriteObject(stream, obj);
byte[] dataBytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(dataBytes, 0, (int)stream.Length);
string json = Encoding.UTF8.GetString(dataBytes);
public static T JsonToObject(string jsonString)
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
var stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T t1 = (T)serializer.ReadObject(string);
return t1;
&使用Json.NET(Newtonsoft.Json)进行序列化与反序列化
List&Student& students = studentBLL.GetALL();
string jsonStudents = JsonConvert.SerializeObject(students); string jsonStudents = service.GetAllStudent();
List&Student& students = JsonConvert.DeserializeObject&List&Student&&(jsonStudents);
学习资料:#
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:317530次
积分:4154
积分:4154
排名:第3918名
原创:104篇
评论:66条
(5)(2)(4)(2)(1)(9)(5)(2)(7)(1)(2)(2)(2)(1)(1)(1)(1)(1)(3)(2)(3)(6)(13)(10)(5)(1)(2)(2)(3)(2)(1)(1)(3)(2)c#在Asp.Net中解析json数据 - 为程序员服务
为程序员服务
c#在Asp.Net中解析json数据
在.Net framework 3.5之后有了System.Runtime.Serialization.Json命名空间,利用这个命名空间我们可以方便的序列化反序列化json数据。
要做json的序列化和反序列化,首先需要我们定义json对应的csharp类:
假定我们要序列化Person类,如下代码定义:
using System.Collections.G
using System.L
using System.W
using System.Runtime.S
namespace WebApplication1
[Serializable]
[DataContract]
public class Person
[DataMember(Order=1,Name=&id&)]
public int ID { }
[DataMember(Order=2,Name=&name&)]
public String Name { }
需要注意Person类必须指定DataContract attribute,否则会出现属性名称都是k__BackingField的问题。另外需要做json序列化的属性必须设置DataMember的属性,可以指定Order和Name,分别表示顺序号和属性序列化时的名称。
定义好了Person类,我们就可以使用DataContractJsonSerializer类来做json的序列化和反序列化了。
注意要使用DataContractJsonSerializer做json的序列化和反序列化,必须在web项目中引用:
System.Runtime.Serialization System.ServiceModel System.ServiceModel.Web 三个程序集。
DataContractJsonSerializer类提供了WriteObject(Stream,Object)和ReadObject(Object)两个方法来做json的序列化和反序列化。
如下是样例代码:
using System.Collections.G
using System.L
using System.W
using System.Web.UI;
using System.Web.UI.WebC
using System.Runtime.Serialization.J
using System.IO;
using System.T
namespace WebApplication1
public partial class _Default : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
Person person = new Person { ID = 1,Name=&& };
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Person));
//序列化json对象
using (var ms = new MemoryStream())
jsonSerializer.WriteObject(ms, person);
String json = Encoding.UTF8.GetString(ms.ToArray());
literalJson.Text =
//反序列化json对象
var jsonText = @&{&&id&&:2,&&name&&:&&&&}&;
using (var ms = new MemoryStream())
var buffer = Encoding.UTF8.GetBytes(jsonText);
ms.Write(buffer, 0, buffer.Length);
ms.Seek(0, SeekOrigin.Begin);
var objPerson = (Person)jsonSerializer.ReadObject(ms);
literalPersonInfo.Text = string.Format(&person id == {0},person name = {1}&, objPerson.ID, objPerson.Name);
上面的方法只能对Person类做序列化和反序列化,我们也可以写成一个泛型方法,来方便使用:
如下代码:
public static class JsonConvert{
public static string Serialize&T&(T obj)
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream ms = new MemoryStream())
serializer.WriteObject(ms, obj);
return Encoding.Default.GetString(ms.ToArray());
public static T Deserialise&T&(string json)
T obj = Activator.CreateInstance&T&();
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
obj = (T)serializer.ReadObject(ms);
介绍完毕。
您可能的代码
相关聚客文章
相关专栏文章

我要回帖

更多关于 c 复杂json反序列化 的文章

 

随机推荐