转载自: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);
运行。有的对象解析不出,会报错