C#和#x27;s版的JS';s JSON

C#和#x27;s版的JS';s JSON,c#,unity3d,C#,Unity3d,我最近使用Unity进入了C#。我以前使用过JavaScript,我知道它们显然有不同之处,但仍然有一些相似之处。我将JSON与JS结合使用,效果非常好。现在有了Unity,我想用JSON在无限跑者游戏中存储即将到来的“阶段”的数据。但根据我的经验,JSON在C#上的效果不如在JS上好。我已经看过Unity的,但还没有弄清楚是否可以简单地拥有一个字符串,然后将其转换成一个可以访问的对象,比如object.item.array[0]。item,这是在JS中执行的方法。我看到的另一件事是,作为一名C

我最近使用Unity进入了C#。我以前使用过JavaScript,我知道它们显然有不同之处,但仍然有一些相似之处。我将JSON与JS结合使用,效果非常好。现在有了Unity,我想用JSON在无限跑者游戏中存储即将到来的“阶段”的数据。但根据我的经验,JSON在C#上的效果不如在JS上好。我已经看过Unity的,但还没有弄清楚是否可以简单地拥有一个字符串,然后将其转换成一个可以访问的对象,比如
object.item.array[0]。item
,这是在JS中执行的方法。我看到的另一件事是,作为一名C#的新手,我对它一无所知。那么C#是否有类似于JSON的东西,但它更为集成?我用过C#列表,你能得到包含项目而不仅仅是数组的3D列表吗?我知道它们是非常不同的语言,在一种语言上运行良好的语言可能在另一种语言上运行不好

JSON就是用JavaScript表示对象的方式。虽然C#可以使用JSON,但定义自己的定制可能会容易得多。使用类,您可以定义所需的所有属性,将它们串成一个列表,等等。。希望这能有所帮助。

JSON正是JavaScript中对象的表示方式。虽然C#可以使用JSON,但定义自己的定制可能会容易得多。使用类,您可以定义所需的所有属性,将它们串成一个列表,等等。。希望这能有所帮助。

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

只需将JSON字符串转换为JSONObject即可

也许会是个好老头。只需根据您的需要将和复制到
资产
文件夹中的某个位置即可(提供一些扩展,用于直接解析
Vector2
Vector3
Vector4
Quaternion
rectfoset
matrix4x4x4

然后给出了json示例

{
    "version": "1.0",
    "data": {
        "sampleArray": [
            "string value",
            5,
            {
                "name": "sub object"
            }
        ]
    }
}
您只需访问单个字段,如

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"
...
使用它,您不必重新创建JSON数据的整个c#类表示,如果您只想从JSON字符串中访问单个值,这有时可能会带来巨大的开销


但是,如果您想序列化和反序列化整个数据结构,那么使用
SimpleJSON
是不会让您满意的。鉴于上面的例子,这是如何使用Unity的

创建要存储的数据的c#类表示。在这种情况下,例如

[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 = "";
}
否则

JsonUtility.FromJsonOverwrite(jsonString, jsonObject);

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

只需将JSON字符串转换为JSONObject即可

也许会是个好老头。只需根据您的需要将和复制到
资产
文件夹中的某个位置即可(提供一些扩展,用于直接解析
Vector2
Vector3
Vector4
Quaternion
rectfoset
matrix4x4x4

然后给出了json示例

{
    "version": "1.0",
    "data": {
        "sampleArray": [
            "string value",
            5,
            {
                "name": "sub object"
            }
        ]
    }
}
您只需访问单个字段,如

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"
...
使用它,您不必重新创建JSON数据的整个c#类表示,如果您只想从JSON字符串中访问单个值,这有时可能会带来巨大的开销


但是,如果您想序列化和反序列化整个数据结构,那么使用
SimpleJSON
是不会让您满意的。鉴于上面的例子,这是如何使用Unity的

创建要存储的数据的c#类表示。在这种情况下,例如

[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 = "";
}
否则

JsonUtility.FromJsonOverwrite(jsonString, jsonObject);

C#中json的标准是(在我看来,并不是作为答案添加)Newtonsoft.json只需安装nuget包。除此之外,你最好问一个关于特定问题的特定问题。一般的“列表如何在C#中工作”类型的问题有点含糊不清,难以得到好的答案。我不太确定你在问什么。C#比JavaScript强得多,所以“传统”的JSON技术不会很好地工作。当然,您可以使用上述任一库从JSON获取C#对象。“你想知道什么?”本,谢谢,这似乎比我迄今为止看到的一切都要相似。我想这就是我最终要使用的。@Ruzihm,我看到的只是看看是否有一种方法可以简单地通过C#将字符串转换为JSON对象。据我所见,它似乎在10种不同的方式上做了相反的事情。@JackStoller在该页面上说“反序列化”的任何地方都在谈论从JSON->C#object开始。当你说“字符串到JSON对象”时,你的意思是含糊不清的。它说“反序列化json字符串而不使用类”的部分可能会解决这个问题。C#中json的标准是(在我看来,所以不是作为答案添加)Newtonsoft.json只需安装nuget包。除此之外,你最好问一个关于特定问题的特定问题。一般的“列表如何在C#中工作”类型的问题有点含糊不清,难以得到好的答案。我不太确定你在问什么。C#比JavaScript强得多,所以“传统”的JSON技术不会很好地工作。当然,您可以使用上述任一库从JSON获取C#对象。“你想知道什么?”本,谢谢,这似乎比我迄今为止看到的一切都要相似。我想这就是我最终要使用的。@Ruzihm,我看到的只是看看是否有一种方法可以简单地通过C#将字符串转换为JSON对象。据我所见,它似乎在10种不同的方式上做了相反的事情。@JackStoller在该页面上说“反序列化”的任何地方都在谈论从JSON->C#object开始。当你说“字符串到JSON对象”时,你的意思是含糊不清的。它说“无类反序列化json字符串”的部分可能会解决这个问题。非常感谢,这正是我想要的。非常感谢,这正是我想要的。