JS的JSON的C#版本

时间:2019-06-06 21:48:15

标签: c# unity3d

我最近使用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列表?我知道它们是非常不同的语言,一种对某一种有效的语言,可能对另一种不适用。

2 个答案:

答案 0 :(得分:2)

我认为与您在问题和评论中所描述的最接近

  

只需将JSON字符串转换为JSONObject

可能是旧的SimpleJSON。只需复制SimpleJSON.cs,然后根据您的需要SimpleJSONUnity.cs(提供了一些扩展名,可以直接与Vector2Vector3Vector4,{{1 }},QuaternionRectRectOffset)放入您的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。使用类,您可以定义所需的所有属性,将它们串在一起成为列表,等等。希望这会有所帮助。