我最近使用Unity进入C#。我以前使用过JavaScript,但知道它们之间确实存在差异,但仍然有一些相似之处。我已经将JSON与JS结合使用,并且效果很好。现在使用Unity,我想在无限的亚军游戏中以JSON存储即将出现的“阶段”的数据。但是根据我的经验,JSON在C#上的效果不如JS。我已经看过Unity的JSON Utility,但还没有弄清楚是否有可能简单地拥有一个字符串,然后将其转换为可以访问的对象,就像object.item.array[0].item
一样,这就是您要做的JS。我看过的另一件事是this,但是作为C#的新手,我无法做头或尾。那么C#是否具有类似JSON的东西,但它的集成度更高?我已经使用过C#列表,您能否获得包含项而不是数组的3D列表?我知道它们是非常不同的语言,一种对某一种有效的语言,可能对另一种不适用。
答案 0 :(得分:2)
我认为与您在问题和评论中所描述的最接近
只需将JSON字符串转换为JSONObject
可能是旧的SimpleJSON
。只需复制SimpleJSON.cs
,然后根据您的需要SimpleJSONUnity.cs
(提供了一些扩展名,可以直接与Vector2
,Vector3
,Vector4
,{{1 }},Quaternion
,Rect
和RectOffset
)放入您的Matrix4x4
文件夹中。
然后给出示例json
Assets
您可以简单地访问单个字段,例如
{
"version": "1.0",
"data": {
"sampleArray": [
"string value",
5,
{
"name": "sub object"
}
]
}
}
使用此方法,您不必重新创建JSON数据的整个c#类表示形式,如果您只想从JSON字符串访问单个值,则有时可能会产生巨大的开销。
但是,如果要序列化和反序列化整个数据结构,则使用using SimpleJSON;
...
var jsonObject = JSON.Parse(the_JSON_string);
string versionString = jsonObject["version"].Value; // versionString will be a string containing "1.0"
float versionNumber = jsonObject["version"].AsFloat; // versionNumber will be a float containing 1.0
string val = jsonObject["data"]["sampleArray"][0]; // val contains "string value"
string name = jsonObject["data"]["sampleArray"][2]["name"]; // name will be a string containing "sub object"
...
会感到不满意。给定上面的示例,这就是您如何使用Unity的JsonUtility
创建要存储的数据的C#类表示。在这种情况下像
SimpleJSON
然后用值填充它,并将其解析为JSON
[Serializable]
public class RootObject
{
public string version = "";
public Data data = new Data();
}
[Serializable]
public class Data
{
public List<object> sampleArray = new List<object>();
}
[Serializeable]
public class SubData
{
public string name = "";
}
如果尚未创建var jsonObject = new RootObject()
{
version = "1.0",
data = new Data()
{
sampleArray = new List<object>()
{
"string value",
5,
new SubData(){ name = "sub object" }
}
}
};
var jsonString = JsonUtility.ToJson(jsonObject);
,请将其转换回c#
jsonObject
否则
jsonObject = JsonUtility.FromJson<RootObject>(jsonString);
答案 1 :(得分:0)
JSON就是JavaScript中对象表示方式。尽管C#可以使用JSON,但您可能会更轻松地定义自己的自定义classes。使用类,您可以定义所需的所有属性,将它们串在一起成为列表,等等。希望这会有所帮助。