原创
car_5

Dos.Common 从v1.0.6.7起,不再依赖json.net,修改为内置fastJSON,同时对fastJSON做了升级优化。

json.net很强大,本人也用了很多年了,今后也会一直使用。但为了让Dos.系列组件尽量减少依赖项,同时对比了fastJSON与json.net的性能测试,两者平分秋毫,而fastJSON仅几十KB,所以决定在Dos.系列组件中采用fastJSON,并且修复fastJSON中的大量不足,以达到平时的基本需求。

本文简单介绍下Dos.Common.JsonHelper的用法,以及对fastJSON的升级优化介绍。

对fastJSON的升级优化:

1、fastJSON不支持ulong等类型的反序列化,Dos.Common.JsonHelper在集成fastJSON时解决了这个bug。

2、fastJSON不支持像json.net那样标记属性[JsonProp(PropertyName = "customer")]以便序列化、反序列化自定义属性名,Dos.Common.JsonHelper扩展了JsonProp属性,同时让fastJSON支持标记自定义属性名。

3、修改了fastJSON一些内置参数的默认值,让它更符合国内使用。

4、让fastJSON支持字符串反序列化为int等数字类型。

5、更多优化见 fastJSON更新日志.txt

Dos.Common.JsonHelper用法:

using Dos.Common;
//定义一个需要序列化的类
public class Test
{
    public int a { get; set; }
    public string b { get; set; }
    public DateTime c { get; set; }
    [XmlIgnore]
    public string d { get; set; }
    [JsonProp(PropertyName = "ege")]
    public decimal e { get; set; }
}
var tClass = new Test()
{
    a = 123,
    b = "456",
    c = DateTime.Now,
    d = "ITdos",
    e = 123.456M
}
//序列化Test类
var result1 = JSON.ToJSON(tClass);
//序列化结果:{"a":123,"b":"456","c":"2016-04-27T10:52:12","ege":123.456}
//反序列化Test类
var result2 = JSON.ToObject<Test>(result1 );
//反序列化结果:a: 123,    b: "456",    c: {2016-4-27 10:52:12},    d: null,    e: 123.456

从以上结果可以看出,用法与json.net大同小异:

1、[XmlIgnore] 表示不序列化该属性。

2、[JsonProp(PropertyName = "ege")] 表示将属性e序列化为ege。


未完待续...