/CatJson

为Unity开发者量身打造的Json库,内置ILRuntime支持

Primary LanguageC#MIT LicenseMIT

简介

为Unity开发者量身打造的Json库,内置ILRuntime支持

在内存分配,CPU耗时上都达到了一个较好的水准

源码架构十分精简易读,可方便的按需求进行扩展修改

QQ交流群:762036315

性能对比

反序列化Json文本为自定义数据类型:

将自定义数据类型序列化为Json文本:

功能介绍

  • 支持Json文本与通用Json对象间的转换

    JsonObject jo = JsonParser.Default.ParseJson<JsonObject>(jsonText);
    string jsonText = JsonParser.Default.ToJson(jo);
    
    //或者使用扩展方法的形式
    JsonObject jo = jsonText.ParseJson<JsonObject>();
    string jsonText = jo.ToJson();
  • 支持Json文本与自定义数据对象间的转换

    CustomData data = JsonParser.Default.ParseJson<CustomData>(jsonText);
    string jsonText = JsonParser.Default.ToJson<CustomData>(data);
    
    //或者使用扩展方法的形式
    CustomData data = jsonText.ParseJson<CustomData>();
    string jsonText = data.ToJson();
  • 基础数据类型支持byte,sbyte,short,ushort,int,uint,long,ulong,float,double,decimal,char

  • 支持自定义枚举类型,会作为string进行转换

  • 数据容器类型支持字典、数组、List,其中字典key的类型除了string外还支持任意数字类型与枚举类型

    注意:支持三者的互相嵌套,但对于数组套数组的情况只支持锯齿数组不支持多维数组

  • 支持Json文本与数据容器类型间的转换

    int[] nums =  JsonParser.Default.ParseJson<int[]>("[1,2,3]");
  • 支持各种Unity特有数据类型,如Vector2/3/4,Quaternion,Color,Bounds,Rect,Keyframe,AnimationCurve等

  • 序列化为Json文本时支持格式化

    可通过设置JsonParser.Default.IsFormat = false关闭格式化序列化

  • 支持多态序列化/反序列化

    可通过设置JsonParser.Default.IsPolymorphic = false关闭多态序列化/反序列化

  • 支持使用者通过自定义JsonFormatter指定某个类型的转换方式

    调用JsonParser.AddCustomJsonFormatter(Type type, IJsonFormatter formatter)即可注册指定类型的自定义Formatter

  • 支持使用JsonIgnore特性标记想要忽略的字段/属性

    对于无法通过修改源码进行标记的字段/属性,可通过调用JsonParser.AddIgnoreMember(Type type, string memberName)进行忽略

  • 支持使用JsonKey特性自定义序列化/反序列化时的Key名称

    对于无法通过修改源码进行自定义JsonKey的字段/属性,可通过调用JsonParser.SetJsonKey(Type type, string key, FieldInfo fi)JsonParser.SetJsonKey(Type type, string key, PropertyInfo fi)进行自定义

  • 定义了IJsonParserCallbackReceiver接口,为使用者提供序列化前的回调OnToJsonStart和反序列化后的回调OnParseJsonEnd,以处理其他特殊情况

  • 支持使用ILRuntime时对于热更层类型的序列化/反序列化,使用FUCK_LUA宏即可一键开启对ILRuntime的适配

    注意:如果要在热更层调用ToJson或ParseJson的泛型版本,需要在ILRuntime初始化时调用ILRuntimeHelper.RegisterILRuntimeCLRRedirection注册CatJson的CLR重定向

注意事项

  • JsonParser.Default表示默认Json解析器对象,若需要创建不同Parser实例,可通过JsonParser jsonParserObject = new JsonParser()创建,不同实例不共享配置设置
  • 默认只会对公有的实例字段/属性(且属性必须同时具有get/set)进行序列化/反序列化,可通过调用JsonParser.SetBindingFlags(BindingFlags bindingFlags)来修改BindingFlags
  • 对于字段/属性而言,如果其值为null,false或0,那么为了性能考虑将不会对该字段/属性进行序列化(可以通过JsonParser.Default.IgnoreDefaultValue = false全局关闭此项设置,或针对指定类型标记JsonCareDefaultValue特性进行局部关闭)

相关文章

CatJson开发总结

CatJsonV2开发总结