1.Unity JSON编码解码之LitJson 深度剖析
2.Unity JSON编码解码 之 LitJson 深度剖析
3.c#反射GetType().GetProperties()为什么取不到值?
Unity JSON编码解码之LitJson 深度剖析
JSON在游戏开发中是一种序列化/反序列化常用的技术,把游戏相关的数据,如地图组成,通过JSON编码,序列化成JSON文本,传输或存储, 要使用的时候再通过JSON技术把文本解析成数据对象,在代码中使用。本文将从以下几个方面详细的跟踪eco源码深度剖析JSON与LitJson库的编码解码:
(1)什么是JSON; (2)Unity如何使用LitJson; (3)LitJson核心源码分析;
1: 什么是JSON
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它是基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON 格式中定义的数据类型包括: Object, Array, Boolean, Double, Float, Int, Long, String 等。其中, Object 类似于C#的字典,Array 类似于 C# 的 List,而其他数据类型则直接映射到 C# 的对应类型。
2: Unity中如何使用LitJson
使用 LitJson 在 Unity 项目中非常简单。操作步骤包括: 创建标准 Unity 项目,下载 LitJson 代码库,javassm源码编写测试节点以讲解 LitJson 库的使用,并创建测试的 Json 文本资源。编码时,定义数据对象并初始化数据,使用 JsonMapper 的 ToJson 方法将对象转化为 JSON 字符串。解码时,从文本资源加载 JSON 字符串,使用 JsonMapper 的 ToObject 方法将字符串转化为数据对象,从而访问和使用 JSON 数据。源码中医
3:LitJson核心源码分析
LitJson 实现了 JSON 的简单且高效的编码解码功能。其核心在于定义了 JsonData 数据结构,用于表示 JSON 中的任何数据类型,包括基本数据类型和容器类型(如 Object 和 Array)。JsonData 结构内部使用枚举 JsonType 来标识数据类型,并通过 Dictionary 和 List 分别存储 Object 和 Array 的元素。通过重载 [] 操作符,JsonData 提供了方便的容器访问方式。同时,bedrockserver源码LitJson 通过类型强转操作符使得基本数据类型可以直接转换为 JsonData,简化了 JSON 数据的处理。解析 JSON 字符串时,LitJson 通过解析文本内容并生成对应的数据结构。要深入理解 LitJson 的实现细节,建议阅读源码。
Unity JSON编码解码 之 LitJson 深度剖析
JSON,即JavaScript Object Notation,是gpcopy源码一种轻量级的数据交换格式,它基于ECMAScript标准,以文本形式表示数据,易于人读和机器解析,提高网络传输效率。基本数据类型包括Boolean、Double、Float、Int、Long和String,而Object和Array则作为容器,可嵌套其他类型的数据。
编码(序列化)过程是将编程语言中的数据对象转换为JSON文本,解码(反序列化)则是解析JSON文本,识别数据类型,如识别花括号{ }表示对象,方括号[]表示数组。Unity C#中, LitJson库常用于处理JSON的编码和解码。
在Unity项目中使用LitJson,步骤简单:首先,将库下载并添加到项目中;然后,定义一个测试数据对象,如GameItem,进行编码和解码操作。编码时,使用JsonMapper的ToJson方法将对象转换为Json String;解码时,通过JsonMapper的ToObject方法将JsonText.txt中的文本解析为JsonData对象,进而访问其中的数据。
LitJson的核心源码分析,JsonData是其核心数据结构,它以JsonType枚举表示数据类型,存储相应类型的数据。Object和Array分别用Dictionary和List作为容器,通过重载[]操作符和类型强转操作符,实现了灵活的数据访问和转换。JsonWrapper则负责解析JSON字符串,生成对应的Json对象。
c#反射GetType().GetProperties()为什么取不到值?
我测试是通过的,怀疑你是否定义了属性? static void Main(string[] args){
C c = new C();
c.S = "SS";
C c1 = getObject<C>(c);
Console.WriteLine(c1.S);//SS1
Console.ReadLine();
}
class C
{
public string S { get; set; }//属性
}
static T getObject<T>(T t)
{
string temp = "";
System.Reflection.PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (System.Reflection.PropertyInfo p in propertys)
{
if (p.PropertyType == typeof(string))
{
temp = p.GetValue(t, null).ToString();
p.SetValue(t, temp + "1", null);
}
}
return t;
}