您的位置:首页 > 移动开发 > Unity3D

unity 常用的几种解析json方式

2018-01-06 16:16 579 查看
目前接触的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:

string json = @"
{
""d"":""d"",
""album"" : {
""cc"":""cc"",
""name""   : ""The Dark Side of the Moon"",
""artist"" : ""Pink Floyd"",
""year""   : 1973,
""tracks"" : [
""Speak To Me"",
""Breathe"",
""On The Run""
],
""tt"":""tt"",
""tracksOb"":[{""trackOb"":""11""},{""trackOb"":""22""}],
""bb"":""bb""
}
}
";


要对应Json 的mod有 3个

分别是 OO, TestModel,TestModel2

public class OO
{
public string d;
public TestModel album;
public string bb;
}

public class TestModel
{
public string name;
public string artist;
public int year;
public string[] tracks;
public TestModel2[] tracksOb;
}

public class TestModel2
{
public string trackOb;
}


以上是要解析的json 和 对应的自定义model数据

1.使用 listJson 解析数据

解析方法
public static T GetData2<T>(string text) where T : class
{
//JsonData table = AnalysisJson.Analy<JsonData>(text);
T t = JsonMapper.ToObject<T>(table.ToJson());

//T t = JsonConvert.DeserializeObject<T>(text);
//T t = JsonUtility.FromJson<T>(text);
return t;
}


OO o = GetData2<OO>(json);


运行解析会报错,因为json字符串 包含了很多对象,和字段

而 数据 OO, TestModel,TestModel2对象,并没有全部和json字符串字段一 一对应,listjson解析很严谨。

2.使用 Newtonsoft.Json

解析方法
public static T GetData2<T>(string text) where T : class
{
//JsonData table = AnalysisJson.Analy<JsonData>(text);
//T t = JsonMapper.ToObject<T>(table.ToJson());

T t = JsonConvert.DeserializeObject<T>(text);
//T t = JsonUtility.FromJson<T>(text);
return t;
}


OO o = GetData2<OO>(json);


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

3.使用unity自带 JsonUtility

解析方法
public static T GetData2<T>(string text) where T : class
{
//JsonData table = AnalysisJson.Analy<JsonData>(text);
//T t = JsonMapper.ToObject<T>(table.ToJson());

// T t = JsonConvert.DeserializeObject<T>(text);
T t = JsonUtility.FromJson<T>(text);
return t;
}


OO o = GetData2<OO>(json);


运行。有的对象解析不出,会报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: