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);//序列化
}
}
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章