Newtonsoft.Json使用总结

所需积分/C币:10 2013-05-07 08:47:37 128KB PDF
2
收藏 收藏
举报

Newtonsoft.Json使用总结
CSAXD JavaScriptconvert Json. net中,这个类用J序列化和反序列化 Java script对象。 这个类有两个方法 序列化 Serializeobject(object value, params Json Converter[] converters) 它有个重载/法 SerializeObject(object value) 反序列化 DeserializeObject(string value, Type type) 它有个重载方法 Deserializeobject(string value) NET2.0使用 JSON. net进行反序列化 人家知道 JSON net最新版是基于net3.5框架的,要如何使其工作在NET2,.0框架下 呢,当然是 GOOGLE+ baidu啦,幸不辱命,终于在一篇英文的博客中找到了解决方法, 这篇文章的大概意思就是 首先下载最新版的ISONNET源码Chttp:/json.codeplex.com/)然后解压,SRC目录 是其源码,我们打开 Newtonsoft.Json.Net20.sn,这个是NET2.0的解决方案,然后编译,很 顺利的就通过了,反正我是没遇啥特殊情况。编译完成后在 bin release目录中你会看到 个名为DoNe20的目录,很显然这个 JSoN net的源码做的相当不错,L经为我们写好了 在NFT20下运行的方法。你会发现这里边多了一个DLL文件( Linq bridgc dl),这个是做 什么用的呢?在那编老外写的文章中介绍说是在NET2.0框架下的LINQ,反止我对这个 LINQ也不怎么熟,没有管,说这个组件有用就有用吧,接下来 COPY Linq bridge.dl和 Newtonsoftson. Net20dl到Json3sr8 Source\TOoLS ILMerge中。还差最后一步。打开 CMD窗口运行如下命令: ilmerge. exe /internalize /out: Newtonsoft. Json. Net20 Merged dll Newtonsoft. Json Net 20. dll Inc 这样会将两个DLL合并为一个DIL,在程厅屮将合并后的DLL引入,就可以使用最新 版的 JSON.NET了 我的反序列化代码: 代码 public static IList<SearchResult> GetSearchList(string json) 我的反序列化代码: 代码 public static IList<search Result> GetSearchList(string sons) i get Json result objects into a list JObject o=(JObject )Json Convert. DeserializeObjectgjsons 赠人玫瑰,手留余香。 CSAXD J Token torrentsArray=(Token )o["rules] ii scrializc JSON results into. NET objects IList<SearchResult> searchResults-new List<SearchResult>o Searchresult c= null foreach(Token result in torrents array) c- new SearchResulto CSearchField= result. SelectToken(field").ToString( Replace("(, C Search String=result. Select Token("data").ToString( Replace(" " " c. ScarchOpcr-rcsult.SclcctTokcn"op").ToString( Rcplacc("\",") / Criterion searchResult- Json Convert. Deserializeobject< Criterion> (result. ToString0); searchResults. Add(c) rcturn scarchrcsults json aaa. bbbb rules":[ " field":"ⅹxxx" data"."ooooo op"."It" "field".xxxX data".I 0000 "field". xxx data.ooooo op":"Ite 以下 Json. net实例代码网址: http:/www.java2s.com/open-source/csharp/development/json.Net/neWtonSoft/JSon/tests/ser alization/ Json Serializer Test. cs. htm 赠人玫瑰,手留余香。 CSAXD Newtonsoft,son处理日期问题 1)问题描述 用 Newtonsoft.Json转换json,可是如果数据厍是日期类型转换出来之后变成了 "Datc(1269582661683+0800)"这样的格式 2)解决方案 (1)使用 IsoDateTime Converter ∥第一步:获取数据 Data Table mDatia Table=mDataSet Tables[01 〃第二步:设置日期格式(使用自定义格式,如果不使用,默认是ISO8601格式) Iso Date Time Converter mTime Converter new IsoDate Time Converter( ∥第三步:转换数据对象 tr Josn= Ison Convert Serialize Object(mData Table, Formatting Indented, m Time Converter); strJosn-Json Convert Serialize Object(mData Table, Im Time Converter); 输出结果:" LegAte":"2009-10-1616:59:59 (2)使用 JavaScriptDatcTimcConvcrtcr ∥第步:获取数据 Data Table mData Table= mDataSet Tables[o ∥第二步:设置日期格式 Java ScriplDate Time Converter mTime Converter=new JavaScriplDate Time Converter ∥第三步:转换数据对象 strJosn-Json Convert Serialize Object(mData Table, Formatting Indented, m Time Converter) strJosn-Json Convert Serialize Object(mDataTable, mTime Converter); 输出结果:" LogDate": new date(126958261683) ∥第四步: Javascript中对数据进行格式处理 renderer: Ext util. Format date Renderer(YfmAdA') 输出结果:2009年10月16日 3)注意事项 上面使用的 Iso Date Time Converter和 I JavaScript Date Time Converter类都是米至 Newtonsoft. son, 所以在使用时,记得引用该插件( using Newtonsoft json、 using Newtonsoft.Json. Converters)。 JSON修饰标签,日期序列化 1)修饰标签,日期序列化 1)通过属性标签自定义JSON序列化 JsonObjectAttribute:类修饰标签,用于控制类如何被序列化为一个json对象 JsonArray Attribute:集合修饰标签,用于控制集合如何被序列化为一个json对象 Json Property Attribute:域和属性修饰标签,用于控制它们如何被序列化为一个json对象 中的属性 Json ConverterAttribute:关,域,属性修饰标签,用于指定序列化期间的转挨器 小例代码: 赠人玫瑰,手留余香。 Axp [ Object(Member Serialization OptIn) public class Customer [son Propcrty (Propcrty Namc=ID) public int Unidi get; set;3 UsonPropertyl public string Customer Namei geL; seL;) Uson Property Uson Converter(typeof(Iso Time Converter))] public DatcTimc CrcatcTimc gct; sct;j [ Property] public string memo get; set; 3 JsonObjectAttribute 这个标签的成员序列化标志指定成员序列化是 opt-1r.(要序列化的成员必须带有 JsonProperly或 DataMember标签)还是 opl-out(默认所有的都会序列化,但通过 JsonIgnorc Attribute标签可以忽略序列化。 opt-out是 json.nct默认的) Json Property Attribute 允许被序刎化的成员自定义名字。这个标签同时标示出:在成员序化设置为 opt-in的 时候,成员会被序列化。 JsonlgnoreAttribute 忽略域或属性的序列化 Json Converter Attribute 用于指派转换对象的 Ison serializer3 这个标签可以修饰类或类成员。用于修饰类时,通过此标签指派的 Json converter贪被 设置为序列化类的默认方式。用于修饰属性或域成员时,被指派的 Json converter会序 列化它们的值。 (2)序列化日期 json中的日期是困难的。这个问题来源于json细则本身,因为在json中没有日期 的原义句法。这个细则包括对象,数组,字符串,整型和浮点,但它没有对日期定义相 关的标准。在 Json. net中用于日期的默认的格式与微软:“Date(1198908717056”这 赠人玫瑰,手留余香。 Axp 个一样 Date Time json Converters 因为在json中没有关于日期的标准,在系统间的互操作过程中出现了大量不同的 格式。幸运的是 Json. net提供了用于读写自定义日期格式的解决方案: Json Converter 个json转换器用于指定一种类型如何被序列化。 public class logEnti public string Details get; set; j public date Time Log Datei get; set;, public void WriteJsonDateso LogEntry entry=new LogEntry Log Datc=ncw Datc Timc(2009, 2, 15. 0,0,0, DatcTimcKind Utc), Details=Application started string defauluson-=Json Convert. Serializeobjecl(entry) t Details". "Application started. ","Log Datc" Datc(1234656000000)V") string javascriptJson- Json Convert. Serializeobject( entry, new JavaScriptDateTimeConverterO) !"Details": " Application started. " "Log Date": new Date(1234656000000)) string isoJson-JsonConvert SerializeObject(entry, new IsoDate Time Converter) / Details". "Application started. " ,"Log Date. 2009-02-15T00: 00: 00Z") JavaScriptDate Time Converter 这个来自 ]son. net的转换器是两种日期转换器之一。它是把日期序列化为一个js日期对 象 new date(1234656000000 IsoDate Time Converter 这种转换器把日期序列化为一个ISO8601格式的字符串。 200902-15T00:00:00Z 这个类有一个日期格式化属性,用于自定义其它的格式字符串。 JSON集合序列化 Json序列化器支持大量序列化和反序列化集合对象的方法。 要序列化一个集合(泛型列表,字典或自定义集合),只需简单的调用相关的序列 赠人玫瑰,手留余香。 CSAXD 化器就可以了。 ]son. net会序列化这个集合和它包含的所有值。 1)序列化 List< Customer list= new List< Customer>O list. ado( ew customer{Und-1, Customername-"宋江"Memo="天魁星"}); lsAd( new Customer{Unid=1, CustomerName="吴用",Memo="天机星"}) list. addi( new customer{Unid=1, Customername="石秀",Memo="天慧星"}); string str son- Json Convert. Serializeobject( list, Formatting Indented) [{"ID":1," Customernamc":"宋江","Mcmo":"天魁星"}, "ID":1," CustomerName":"吴用""Memo":"大机星"}, "ID":l," CustomerName":"石秀";"Memo":"天慧星 2)反序列化 反序列化一个j3on对象到一个net集合,只需指定要反序列化的集合类型即可 json. net支持大量的集合类型。 string strJson=@a"[{"ID":1," CustomerName":!"米江","Memo":"天魁星 m"},("ID":1;" Customer name":""吴用"!"Memo":"大机星"}.{"ID" l," Customernamo":""石秀"’"Mcmo":""天慧星"}"; List<Customer> list= Json Convert. DeserializeObject<List< Customer>>(strJson) foreach(Customer c in list Console. WriteLine(c CustomerName) 宋江 吴用 石秀 3)反序列化字典 json.net也能把json对象反序列化为一个泛型字典。json对象的属性名和值会被添 加到一个字典中 string strJson=c"{"D":1," CustomerName":"宋江","Memo":"天魁星"}"; Dictionary<string, string> dictionary Json Convert Deserialize Object<Dictionary<string string >>(strJson) 赠人玫瑰,手留余香。 CSAXD foreach(Key ValuePair<string, string> kp in dictionary) Console. WritcLinc(kp. Kcy +": +kp Valuc) 这里还用这个例子,虽然这个例子没有意义,但属性与属性值也可以看做一个字典关系。 JSON回调方法修饰标签 2)序列化回调方法修饰标签 json.net支持序列化回调方法标签。一个回调修饰标签可以在序列化和反序列化对 象前后控制对象 OnSerializing On Serialized OnDeserializing On deserialized 通知序列化器在对象的序列化生命周期内要调用哪些方法,并用适合的标签来修饰 方法(序列化时,序列化后,反序列化时,反序列化后)。 参考类: Customer public class Customer 在序列化前后没有变动 public int Unid i geL; set;) 在序列化前后设置和重置 public string CustomerName( get; set; 3 ∥设置为nul,但在序刎化后填充 public string Memo i get; set; F ∥忽略序列化, On Deserializedattribute标签用于序列化之后设置一个值 sonI gnore] public string Other& get; set; y public Customer id=11; CustomerName="宋江" Other="忽略序列化"; Memo null 赠人玫瑰,手留余香。 Axp [OnSerializing] intcrnal void On Serializing Mcthod( Streaming Contcxt contcxt CustomerName="在序列化时被写入数据文件"; TOn] internal void OnSerializedMethod( Streaming Context context Customernamc="序列化之后被赋值"; OnDeserializingI internal void On Deserializing Method(Streaming Context context Other="反序列化吋被赋值"; T OnDeserialized intcrnal void On DcscrializcdMcthod( Streaming Contcxt contcxt) Memo="反序列化之后,被赋值"; 这个net类有4个属性: Unid,在序列化前后值没有变化,且值不为null CustomerName,在序列化前后赋值和重设值 Memo,给nul值 Other,这个属性忽略序列化。 public void SerializeCallbackso Customer customer-new Customer Console. Writeline(customer: Unid) Console. WriteLine(customer CustomerName) Console. WriteLine(customer Memo); Console. Writeline(customer. Other) 宋江 赠人玫瑰,手留余香。

...展开详情
试读 14P Newtonsoft.Json使用总结
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 签到新秀

  • 分享宗师

关注 私信
上传资源赚钱or赚积分
最新推荐
Newtonsoft.Json使用总结 10积分/C币 立即下载
1/14
Newtonsoft.Json使用总结第1页
Newtonsoft.Json使用总结第2页
Newtonsoft.Json使用总结第3页

试读结束, 可继续读2页

10积分/C币 立即下载