随笔分类 - 框架学习----Json.net
摘要:通常当用到大的Json文档的时候,你可能只对其中的一小个片段信息感兴趣。这种情况下你想把Json.Net转换为.Net 对象就会让人很困扰,因为你必须为Json的整个结果定义一个.Net的类。使用Json.Net很容易避开这个问题。在把它们传递到Json.Net序列化器之前,你可以使用Linq to Json 提取Json中你想要序列化的一些片段。string googleSearchText = @"{ ""responseData"": { ""results"": [ { ""G
阅读全文
摘要:IContractResolver接口提供了一种方法去定制序列化器如何去序列化和反序列化.Net对象为Json对象实现IContractResolver接口,然后为Json序列化器分配一个实例对象,这样你就可以控制对象是否被序列化为Json对象或者Json数组、对象的成员应该被序列化成什么、如何被序列化、及他们被谁调用等。->DefaultContractResolverDefaultContractResolver是序列化器默认的解析器,它以虚函数的形式提供了很多扩展功能,可以被覆写(overriden).->CamelCasePropertyNamesContractResol
阅读全文
摘要:当序列化.Net对象为Json对象时经常会遇到的一个问题是:最终的Json包含大量多余的属性和属性值。这个问题在返回Json到客户端时显得特别重要。Json越大意味着需要更大的带宽,使网速变得更慢。 为了解决多余的Json这个问题,Json.Net有一系列内置的选项可以进行调整。->JsonIgnoreAttribute and DataMemberAttribute默认情况下,在Json创建的时候Json.Net会包含所有类级别的public属性和字段。添加JsonIgnoreAttribute到属性上,告诉序列化器序列化时跳过它。public class Car { // inclu
阅读全文
摘要: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支持在序列化和反序列化的过程中进行异常处理。异常处理让您捕获一个异常,您可以选择是否处理它,继续序列化或者让异常抛给上一层,在你的应用程序中被抛出。异常处理通过两个方法来定义:the Error event on JsonSerializer 和 OnErrorAttribute>Error Event error event是一个建立在JsonSerializer 上的异常处理.当序列化或者反序列化JSON时,任何有异常抛出的情况error event都会被触发.就像建立在JsonSerializer上的所有设置一样,它也可以在JsonSerializerSetting
阅读全文
摘要:默认情况下,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支持序列化回调方法,回调方法通过Json序列化器(JsonSerializer)可以用来操作一个对象,在它被序列化和反序列化之前或者之后.OnSerializingOnSerializedOnDeserializingOnDeserialized为了告诉序列化器在对象的序列化生命周期中哪个方法应该被调用,需要用适当的attribute(OnSerializingAttribute,OnSerializedAttribute,OnDeserializingAttribute,OnDeserializedAttribute)来标记方法.例如对象序列化的回调方法:using Newt
阅读全文
摘要:DateTime类型在Json中表示是很难的。问题来源于JSON spec(Json规范)自身,没有精确的语法。这个规范包括objects, arrays, strings, integers 和 floats,但是对于date是什么样子的没有定义准确的标准。关于时间,Json.Net使用的默认格式与微软:"\/Date(1198908717056)\/"相同,您可以从此外获得更多信息.DateTime JsonConverters由于在Json中没有关于时间的准确标准,当与其他系统进行互操作时就会有大量不同的时间格式。幸运的是,Json.Net为了处理读写自定义时间提供了
阅读全文
摘要: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
阅读全文
摘要: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
阅读全文
摘要:使用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
阅读全文
摘要: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
阅读全文
摘要:当你使用ajax的时候,json是一个很方便的数据传输手段.但是对于很多人来说,经常会遇到的一个很令人头疼的问题就是”invalid label”错. 明明json串看起来是对的,怎么还会出错呢? 比如,如下的代码:function handle_success(response){var json = eval(response); // response = "{'foo' : 'bar'}";}浏览器会报,invalid label错, 这是因为, eval会尝试将你的response解释为一个label, 当你在脚本中直接写:<
阅读全文
摘要:1:前言Socket通信中,客户端与服务器之间传递的是字节流。而在现实的应用中我们需要传递有一定含义的结构。如何传递有意义的结构那?别慌本文就从这里给您做个简单介绍。首先我们来简单认识一下今天的主角:JSON.NET和ProtoBuf2:JSON.NET与ProtoBuf这两个都是开源的项目,项目的地址如下JSON.NET:http://json.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29756ProtoBuf:http://code.google.com/p/protobuf/接下来我们看看两个项目在序列化对象时都是怎么做的。
阅读全文
摘要:测试结果:ProtoBuf Length:115BinaryFormatter Length:1177XmlSerializer Length:814xml length:825做了一个各种序列化方案的压缩比例测试,可以看到protobuf序列化后的大小是xml原始格式的8分之一,是xml序列化后的8分之一,是二进制序列化的10分之一,总体看来ProtoBuf的优势还是很明显的,不过ProtoBuf.net不是google官方提供的,也许和其它平台不兼容,但如果做.NET服务端应用,两边都是.NET,还是可以适用的,即使有一边不是.NET,反正是开源的东西,协议也有,也可以自己实现相应语言的兼
阅读全文
摘要:导读:JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式。在网站应用中使用JSON的场景越来越多,本文介绍 ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间、集合、字典的处理。一、JSON简介JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。JSON是“名值对”的集合。结构由大括号'{}',中括号'[]',逗号',',冒号':',双引号
阅读全文
摘要:<script type="text/javascript"> Array.prototype.clear = function() { this.length = 0; } Array.prototype.insertAt = function(index, obj) { this.splice(index, 0, obj); } Array.prototype.remove = function(index) { this.splice(index, 1); } var t = [{ 'a': {'c':22}, 'b
阅读全文
摘要:http://www.cnblogs.com/KangC/archive/2008/12/08/1349130.htmlJSON进阶一-初识JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1...
阅读全文

浙公网安备 33010602011771号