06 2011 档案
摘要:通常当用到大的Json文档的时候,你可能只对其中的一小个片段信息感兴趣。这种情况下你想把Json.Net转换为.Net 对象就会让人很困扰,因为你必须为Json的整个结果定义一个.Net的类。使用Json.Net很容易避开这个问题。在把它们传递到Json.Net序列化器之前,你可以使用Linq to Json 提取Json中你想要序列化的一些片段。string googleSearchText = @"{ ""responseData"": { ""results"": [ { ""G
阅读全文
摘要:当序列化.Net对象为Json对象时经常会遇到的一个问题是:最终的Json包含大量多余的属性和属性值。这个问题在返回Json到客户端时显得特别重要。Json越大意味着需要更大的带宽,使网速变得更慢。为了解决多余的Json这个问题,Json.Net有一系列内置的选项可以进行调整。->JsonIgnoreAttribute and DataMemberAttribute 默认情况下,在Json创建的时候Json.Net会包含所有类级别的public属性和字段。添加JsonIgnoreAttribute到属性上,告诉序列化器序列化时跳过它。public class Car { // inclu
阅读全文
摘要:IContractResolver接口提供了一种方法去定制序列化器如何去序列化和反序列化.Net对象为Json对象实现IContractResolver接口,然后为Json序列化器分配一个实例对象,这样你就可以控制对象是否被序列化为Json对象或者Json数组、对象的成员应该被序列化成什么、如何被序列化、及他们被谁调用等。->DefaultContractResolverDefaultContractResolver是序列化器默认的解析器,它以虚函数的形式提供了很多扩展功能,可以被覆写(overriden).->CamelCasePropertyNamesContractResol
阅读全文
摘要:CustomCreationConverter是一个在序列化过程中提供自定方式去创建一个对象的Json转换器,一旦对象被创建,它将被序列化器填充值。public interface IPerson { string FirstName { get; set; } string LastName { get; set; } DateTime BirthDate { get; set; } } public class Employee : IPerson { public string FirstName { get; set; } public string LastName { get; s
阅读全文
摘要:默认情况下,Json.Net将通过对象的值来序列化它遇到的所有对象。如果工个list包含两个Person引用,这两个引用都指向同一个对象,Json序列化器将输出每一个引用的所有名称和值。定义类: public class Person { public DateTime BirthDate { get; set; } public DateTime LastModified { get; set; } public string Name { get; set; } }测试: Person p = new Person() { BirthDate = new DateTime(1985, 11
阅读全文
摘要:Json.Net支持在序列化和反序列化的过程中进行异常处理。异常处理让您捕获一个异常,您可以选择是否处理它,继续序列化或者让异常抛给上一层,在你的应用程序中被抛出。异常处理通过两个方法来定义:the Error event on JsonSerializer 和 OnErrorAttribute>Error Event error event是一个建立在JsonSerializer 上的异常处理.当序列化或者反序列化JSON时,任何有异常抛出的情况error event都会被触发.就像建立在JsonSerializer上的所有设置一样,它也可以在JsonSerializerSetting
阅读全文
摘要:Json.Net支持序列化回调方法,回调方法通过Json序列化器(JsonSerializer)可以用来操作一个对象,在它被序列化和反序列化之前或者之后.OnSerializing OnSerialized OnDeserializing OnDeserialized为了告诉序列化器在对象的序列化生命周期中哪个方法应该被调用,需要用适当的attribute(OnSerializingAttribute, OnSerializedAttribute, OnDeserializingAttribute, OnDeserializedAttribute)来标记方法.例如对象序列化的回调方法:usin
阅读全文
摘要:Json序列化器为序列化及反序列化集合对象提供了良好的支持.->Serializing 为了序列化一个集合---一个泛型的list,array,dictionary,或者自定义集合---简单地调用序列化器,使用您想要进行序列化的集合对象作为参数,Json.Net会序列化集合以及所有它包含的值。示例:public class Product { public string Name { get; set; } public decimal Price { get; set; } [JsonConverter(typeof(IsoDateTimeConverter))] public Dat
阅读全文
摘要:DateTime类型在Json中表示是很难的。问题来源于JSON spec(Json规范)自身,没有精确的语法。这个规范包括objects, arrays, strings, integers 和 floats,但是对于date是什么样子的没有定义准确的标准。关于时间,Json.Net使用的默认格式与微软:"\/Date(1198908717056)\/"相同,您可以从此外获得更多信息.DateTime JsonConverters由于在Json中没有关于时间的准确标准,当与其他系统进行互操作时就会有大量不同的时间格式。幸运的是,Json.Net为了处理读写自定义时间提供了
阅读全文
摘要:Attributes 可以用来控制Json.Net如何序列化和反序列化.Net对象。>JsonObjectAttribute--标记在类上,用于控制该类如何被序列化为一个Json对象(JSON Object)>JsonArrayAttribute--标记在集合上,用于控制该集合如何被序列化为一个Json集合(JSON Array)>JsonPropertyAttribute--标记在字段和属性上,用于控制它如何被序列化为一个Json对象中的属性>JsonConverterAttribute--标记在类或者字段和属性上,用于序列化时指定Json转换器(JsonConver
阅读全文
摘要:为了手动读写Json对象,Json.Net提供了JsonReader 和 JsonWriter这两个抽象类及其相应的派生类:1.JsonTextReader 和 JsonTextWriter用来读写Json对象的文本,JsonTextWriter 有大量设置去控制Json对象的格式。测试: //写操作 StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); using (JsonWriter jsonWriter = new JsonTextWriter(sw)) { jsonWriter.
阅读全文
摘要:Json.Net 支持 Json 与Xml之间的相互转换.转换规则:1.元素保持不变2.属性添加前缀@3.单个子文本结点直接作为元素结点的值,否则通过#text访问4.XML声明和处理指令以?为前缀5.字符数据(Character data)、注释、whitespace 和significate whitespace结点分别通过#cdata-section,#comment,#whitespace and #significate-whitespace 访问。6.同一级多个相同名字的结点作为一组,放到同一个集合中7.空元素为nullusing Newtonsoft.Json;测试:string
阅读全文
摘要:using Newtonsoft.Json.Linq;定义类: public class Product { public string Name { get; set; } public DateTime Expiry { get; set; } public decimal Price { get; set; } public string[] Sizes { get; set; } }测试: Product product = new Product { Name = "Apple", Expiry = new DateTime(2010, 12, 18), Pric
阅读全文
摘要:使用Newtonsoft.Json这是一个开源的Json.Net库。下载地址:http://json.codeplex.com/releases/view/50552。当前版本为 Release 8从下载到的源代码中获取Newtonsoft.Json.Net20.dll,添加到自己的工程中。using Newtonsoft.Json;定义类:public class Message { public string Address { get; set; } [JsonProperty(TypeNameHandling = TypeNameHandling.All)] public object
阅读全文