皮皮网

皮皮网

【文字的世界源码】【海洛创意 源码】【visifire for wpf 源码】litjson源码下载

时间:2024-12-28 20:43:46 分类:探索

1.Unity JSON编码解码之LitJson 深度剖析
2.c#反射GetType().GetProperties()为什么取不到值?
3.Unity JSON编码解码 之 LitJson 深度剖析

litjson源码下载

Unity JSON编码解码之LitJson 深度剖析

       JSON在游戏开发中是码下一种序列化/反序列化常用的技术,把游戏相关的码下数据,如地图组成,码下通过JSON编码,码下序列化成JSON文本,码下传输或存储,码下文字的世界源码要使用的码下时候再通过JSON技术把文本解析成数据对象,在代码中使用。码下本文将从以下几个方面详细的码下深度剖析JSON与LitJson库的编码解码:

       对,这里有一个游戏开发交流小组,码下希望大家可以点击进来一起交流一下开发经验呀

       (1)什么是码下JSON;

       (2)Unity如何使用LitJson;

       (3)LitJson核心源码分析;

       1: 什么是JSON

       JSON(JavaScriptObject Notation, JS对象简谱)是一种轻量级的数据交换格式。它是码下基于ECMAScript的一个子集,采用完全独立于编程语言的码下文本格式来存储和表示数据。简洁和清晰的码下层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,码下同时也易于机器解析和生成,并有效地提升网络传输效率。接下来看下JSON格式中定义的数据类型:

       Object: Object在JSON中相当于C#的字典,是一个表,结构为{ key1: v1, key2: v2};

       Array: Array在JSON中相当于C#的List,是一个数组,结构为[v0, v1, v2, …];

       Boolean: Boolean在JSON中相当于C#的boolean;

       Double: Double在json中相当于C#的double;

       Float: Float在json中相当于C# float;

       Int: Int在json中相当于C# int;

       Long: Long在json中相当于C# long;

       String: String在json中相当于C# string;

       2: Unity中如何使用LitJson

       Unity项目中使用LitJson,操作起来也十分简单。海洛创意 源码接下来我们详细的操作一下,具体步骤如下:

       (1): 创建一个标准的Unity项目,下载LitJson的代码库,我一般会新建一个3rd文件夹,把LitJson的代码库放入到项目中,如图所示:

       (2): 编写一个测试节点,挂一个测试代码,用来测试与讲解LitJson库的使用,同时编写一个JsonText.txt的文本资源,作为测试的Json文本,如图:

       (3): Json编码

       定义一个简单的数据对象GameItem, 如下

       运行结果为:{ "a":,"b":false,"c":,"str":"hello"}, 如下图:

       (4) Json解码

       从JsonText.txt文件里面加载TextAsset资源,或去资源中的visifire for wpf 源码文本对象,得到JsonStr, 调用JsonWrapper对象的ToObject方法得到JsonData的数据对象。

       JsonDatajsonObject=JsonMapper.ToObject(jsonTxt.text);

       解析出来jsonObject后,可以根据json中的对象类型来直接访问即可。

       JsonData rst = jsonObject["rst"]; // 子Object对象

       JsonData partnerList = rst["partnerCodeList"]; // 数组对象

       JsonData partner0 = partnerList[0]; // 用数组方式访问

       JsonData可以强转成任意的基本数据类型,string, float, double, boolean, int等。

       3:LitJson核心源码分析

       LitJson使用起来如此简单,那么它是具体怎么实现的呢?接下来我们来分析LitJson源码来学习它代码开发的一些技巧。首先要看下JsonData数据结构,在LitJson内部,每个数据对象都是eclipse修改关联源码一个JsonData对象。如图

       JsonData里面包含了一个JsonType type的数据成员,用来表示这个JsonData的数据对象是一个什么样的数据类型。JsonType是一个枚举,正好是所有可能的Json的数据类型,如下:

       如果这个数据类型是一个Boolean,数据值就存放在inst_boolean变量里面,如果数据类型是一个string, 数据值就存放在inst_string变量里面。

       在JSON中,Object与Array是容器,所以在JsonData里面分别用Dictionary与List来作为Object与Array的容器,容器中的每个元素又是一个JsonData,所以就实现了容器中可以有容器对象+数据对象。

       JsonData中重载了[]操作符,方便容器对象来取数据,如图所示:

       Object 容器对象[key]操作重载

       数组容器对象的[index]操作重载

       JsonData中重载了类型强转操作符,让我们能直接通过强转Json来获取基本的萌图床源码数据:

       Int, Float, Double, Boolean, String。如图:

       通过强转基本数据到JsonData,来获取JsonData, 如图:

       这样非常方便的让我们生成了JsonData,非常方便的能通过JsonData获取数据。

       JsonWrapper来解析Json字符串的时候,就是读取文本内容,来根据对应的Token符号来生成对应的Json对象,具体可以阅读源码:

       今天的JSON与LitJson的分析就到这里了。

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;

               }

Unity JSON编码解码 之 LitJson 深度剖析

       JSON,即JavaScript Object Notation,是一种轻量级的数据交换格式,它基于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对象。