LitJson扩展支持float类型和自定义类型

(2) 2024-05-06 15:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说LitJson扩展支持float类型和自定义类型,希望能够帮助你!!!。

LitJson 下载地址 跳转
参考:魔改LitJson
LitJson 支持的格式如下:

public JsonData(bool boolean);  
public JsonData(double number);  
public JsonData(int number);  
public JsonData(long number);
public JsonData(object obj) 
public JsonData(string str);  

不支持解析 float Vector3 Vector2 Quaternion 以及自定义类型
但是LItJson 提供扩展接口 实现如下:
在使用 解析前 调用LitJsonRegiter.Register() 就行

using LitJson;
using Lockstep.Math;
using System;
using UnityEngine;

public class LitJsonRegiter
{ 
   
    public static void Register()
    { 
   
        RegiterType();
        RegisterFloat();
        RegisterLFloat();
        RegisterLVertor3();
        RegisterLVertor2();
        RegisterVector3();
        RegisterVector2();
        RegisterQuaternion();
        RegisterGameObject();
    }

    public static void RegiterType()
    { 
   
        void Exporter(Type obj, JsonWriter writer)
        { 
   
            writer.Write(obj.FullName);
        }

        JsonMapper.RegisterExporter((ExporterFunc<Type>)Exporter);

        Type Importer(string obj)
        { 
   
            return Type.GetType(obj);
        }

        JsonMapper.RegisterImporter((ImporterFunc<string, Type>)Importer);
    }

    private static void RegisterFloat()
    { 
   
        void Exporter(float obj, JsonWriter writer)
        { 
   
            writer.Write(obj);
        }

        JsonMapper.RegisterExporter((ExporterFunc<float>)Exporter);

        float Importer(double obj)
        { 
   
            return (float)obj;
        }

        JsonMapper.RegisterImporter((ImporterFunc<double, float>)Importer);
    }

    private static void RegisterLFloat()
    { 
   
        void Exporter(LFloat obj, JsonWriter writer)
        { 
   
            writer.Write(obj.ToLong().ToString());
        }

        JsonMapper.RegisterExporter((ExporterFunc<LFloat>)Exporter);
        
        LFloat Importer(string  obj)
        { 
   
            return new LFloat(long.Parse(obj)); 
        }

        JsonMapper.RegisterImporter((ImporterFunc<string, LFloat>)Importer);
    }

    private static void RegisterLVertor2()
    { 
   
        void Exporter(LVector2 obj, JsonWriter writer)
        { 
   
            writer.WriteObjectStart();

            writer.WritePropertyName("x");//写入属性名
            writer.Write(obj.x);//写入值
            writer.WritePropertyName("y");
            writer.Write(obj.y);

            writer.WriteObjectEnd();
        }

        JsonMapper.RegisterExporter((ExporterFunc<LVector2>)Exporter);//序列化
    }

    private static void RegisterLVertor3()
    { 
   
        void Exporter(LVector3 obj, JsonWriter writer)
        { 
   
            writer.WriteObjectStart();

            writer.WritePropertyName("x");//写入属性名
            writer.Write(obj.x);//写入值
            writer.WritePropertyName("y");
            writer.Write(obj.y);
            writer.WritePropertyName("z");
            writer.Write(obj.z);

            writer.WriteObjectEnd();
        }

        JsonMapper.RegisterExporter((ExporterFunc<LVector3>)Exporter);//序列化
    }

    private static void RegisterVector3()
    { 
   
        void Exporter(Vector3 obj, JsonWriter writer)
        { 
   
            writer.WriteObjectStart();

            writer.WritePropertyName("x");//写入属性名
            writer.Write(obj.x);//写入值
            writer.WritePropertyName("y");
            writer.Write(obj.y);
            writer.WritePropertyName("z");
            writer.Write(obj.z);

            writer.WriteObjectEnd();
        }

        JsonMapper.RegisterExporter((ExporterFunc<Vector3>)Exporter);//序列化
    }

    private static void RegisterVector2()
    { 
   
        void Exporter(Vector2 obj, JsonWriter writer)
        { 
   
            writer.WriteObjectStart();

            writer.WritePropertyName("x");//写入属性名
            writer.Write(obj.x);//写入值
            writer.WritePropertyName("y");
            writer.Write(obj.y);

            writer.WriteObjectEnd();
        }

        JsonMapper.RegisterExporter((ExporterFunc<Vector2>)Exporter);//序列化
    }

    private static void RegisterQuaternion()
    { 
   
        void Exporter(Quaternion obj, JsonWriter writer)
        { 
   
            writer.WriteObjectStart();
            writer.WritePropertyName("x");//写入属性名
            writer.Write(obj.x);//写入值
            writer.WritePropertyName("y");
            writer.Write(obj.y);
            writer.WritePropertyName("z");
            writer.Write(obj.z);
            writer.WritePropertyName("w");
            writer.Write(obj.w);
            writer.WriteObjectEnd();
        }
        JsonMapper.RegisterExporter((ExporterFunc<Quaternion>)Exporter);//序列化
    }

    private static void RegisterGameObject()
    { 
   
        void Exporter(GameObject obj, JsonWriter writer)
        { 
   
            writer.WriteObjectStart();
            writer.WritePropertyName("name");//写入属性名
            if (obj != null)
                writer.Write(obj.name);//写入值
            else
                writer.Write("Prefab为Null");//写入值
            writer.WriteObjectEnd();
        }
        JsonMapper.RegisterExporter((ExporterFunc<GameObject>)Exporter);//序列化
    }
}

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复