在做项目的时候无法避免使用json数据。在unity中你无法使用普通c#的工具库。因为unity涉及多个跨平台编译,如果你的工具库不支持那可就要哭了。
目前支持全平台编译的json工具库比较有名的有三个,分别是:JsonUtility、newtonjson还有litjson。
本篇只做JsonUtility的用法介绍。
需要注意的是JsonUtility只支持构建对象的方式创建和获取json数,不支持键值对的方式获取。也就是说如果你获取的json由于命名不规范导致的对象名是数字字符串的情况下,你就不能使用JsonUtility了,因为我们无法在c#中创建一个由纯数字命名的属性名。这种情况只能使用LitJson
如果有对LitJson感兴趣的可以看我这篇教程《unity json数据处理方式之 LitJson 使用教程,支持键值对方式,支持包括webgl在内的全平台》
创建json对象结构
使用Serializable语义可以使类可以被序列化。多个类层级调用,就相当于json的多层数据。下面代码定义了一个2层的json数据结构
// 二层json数据
[Serializable]//序列化
public class AssetbundleFile
{
public string name;
public string url;
}
// 顶层json数据
[Serializable]//序列化
public class AssetbundleResource
{
public string version;
public bool updating;
public AssetbundleFile[] assetbundleFiles;
}
以上代码定义的json结构实际上就是这样的:
{
"version":"",
"updating":false,
"assetbundleFiles":[
{
"name":"","url":""
}
]
...
}
创建json对象, 并填充数据
void Main(){
//
AssetbundleResource assetbundleResource = new AssetbundleResource();
assetbundleResource.assetbundleFiles = new AssetbundleFile[]{
new AssetbundleFile(){
name = "file1",
url = "111"
},
new AssetbundleFile(){
name = "file2",
url = "222"
}
};
json对象转json数据字符串
// c#对象转json字符串
string jsonStr = JsonUtility.ToJson(assetbundleResource);
Debug.Log("json字符串:"+ jsonStr);
json数据字符串转json对象
// json字符串转c#对象
AssetbundleResource _assetbundleResource = JsonUtility.FromJson<AssetbundleResource>(jsonStr);
Debug.Log("数据0的name数据为:" + _assetbundleResource.assetbundleFiles[0].name);