unity 常用的几种解析json方式

转载自:https://blog.csdn.net/tianyongheng/article/details/78989612

目前接触的unity 解析json 有几种:
1.比较流行的listjson(数据对象必须和json一对一)
2.目前unity自带 JsonUtility(不能解析复杂的json)
3.Newtonsoft.Json (推荐可以解析复杂的json,不需要和json字段一对一 ,灵活)
(下载地址:https://github.com/SaladLab/Json.Net.Unity3D/releases)

listjson 对json 解析提供多样化,可以解析成JsonData,也可以通过JsonMapper 转成自定义的mode数据对象。
listJson功能比较丰富,但是在通过JsonMapper转成自定的对象时,自定义对象的字段要和解析的json字段一对一(json里面的字段,自定义的对象一定要有),不然会解析失败。
例如:
jison:

 1 string json = @"
 2           {
 3              ""d"":""d"",
 4             ""album"" : {    
 5              ""cc"":""cc"",          
 6               ""name""   : ""The Dark Side of the Moon"",
 7               ""artist"" : ""Pink Floyd"",
 8               ""year""   : 1973,         
 9               ""tracks"" : [
10                 ""Speak To Me"",
11                 ""Breathe"",
12                 ""On The Run""
13               ],
14               ""tt"":""tt"",
15              ""tracksOb"":[{""trackOb"":""11""},{""trackOb"":""22""}],
16              ""bb"":""bb""         
17             }
18           }
19         ";

要对应Json 的mod有 3个
分别是 OO, TestModel,TestModel2

 1 public class OO
 2 {
 3     public string d;
 4     public TestModel album;
 5     public string bb;
 6 }
 7 
 8 public class TestModel
 9 {
10     public string name;
11     public string artist;
12     public int year;
13     public string[] tracks;
14     public TestModel2[] tracksOb;
15 }
16 
17 public class TestModel2
18 {
19     public string trackOb;
20 }

以上是要解析的json 和 对应的自定义model数据
1.使用 listJson 解析数据

 1 解析方法
 2  public static T GetData2<T>(string text) where T : class
 3     {
 4         //JsonData table = AnalysisJson.Analy<JsonData>(text);
 5          T t = JsonMapper.ToObject<T>(table.ToJson());
 6 
 7          //T t = JsonConvert.DeserializeObject<T>(text);
 8         //T t = JsonUtility.FromJson<T>(text);
 9         return t;
10     }
1 OO o = GetData2<OO>(json);

运行解析会报错,因为json字符串 包含了很多对象,和字段
而 数据 OO, TestModel,TestModel2对象,并没有全部和json字符串字段一 一对应,listjson解析很严谨。

2.使用 Newtonsoft.Json

 1 解析方法
 2  public static T GetData2<T>(string text) where T : class
 3     {
 4         //JsonData table = AnalysisJson.Analy<JsonData>(text);
 5          //T t = JsonMapper.ToObject<T>(table.ToJson());
 6 
 7          T t = JsonConvert.DeserializeObject<T>(text);
 8         //T t = JsonUtility.FromJson<T>(text);
 9         return t;
10     }
1 OO o = GetData2<OO>(json);

运行不会报错,完全解析。

3.使用unity自带 JsonUtility

 1 解析方法
 2  public static T GetData2<T>(string text) where T : class
 3     {
 4         //JsonData table = AnalysisJson.Analy<JsonData>(text);
 5          //T t = JsonMapper.ToObject<T>(table.ToJson());
 6 
 7         // T t = JsonConvert.DeserializeObject<T>(text);
 8         T t = JsonUtility.FromJson<T>(text);
 9         return t;
10     }
1 OO o = GetData2<OO>(json);

运行。有的对象解析不出,会报错

猜你喜欢

转载自www.cnblogs.com/leonpf/p/11762867.html
今日推荐