C# 将JSON中的数组反序列化为类/对象

C# 将JSON中的数组反序列化为类/对象,c#,json,C#,Json,我试图将JSON数据存储到一个类中。我可以通过以下方式将另一个JSON字符串反序列化到类中:var ser=JsonConvert.DeserializeObject(myJSON)在我被数组卡住之前 { \"Test\": [{ \"FirstBool\":1, \"aString\":\"hello\" }] } 这是我的JSON类: public class Test { [JsonProperty(

我试图将
JSON
数据存储到一个类中。我可以通过以下方式将另一个
JSON
字符串反序列化到类中:
var ser=JsonConvert.DeserializeObject(myJSON)在我被数组卡住之前

    {
      \"Test\": [{
         \"FirstBool\":1, 
         \"aString\":\"hello\"
      }]
    }

这是我的
JSON
类:

public class Test
{
    [JsonProperty("FirstBool")]
    public bool FirstBool { get; set; }

    [JsonProperty("aString")]
    public string aString { get; set; }
}      

public class ResultObject
{
        [JsonProperty("Test")]
        public List<Test> Test { get; set; }
}

我需要做哪些更改才能使其再次工作?

将其反序列化为列表:

JsonConvert.DeserializeObject<List<Test>>(json);
JsonConvert.DeserializeObject(json);

…而不是包装器对象。

编辑的答案

我后来注意到,您的json字符串包含名为
Test
的对象,它基本上是一个
object
s(
object[]
)的数组

从json字符串中可以看到:

{ “测试”:[{ “第一波”:1, “阿斯汀”:“你好” }] }

[
表示json对象以数组类型开头,
]
表示json对象以数组类型结尾

{
表示json对象开始一个对象类型,
}
表示json对象结束一个对象类型

在您的情况下,需要使用
Newtonsoft.Json
library中的现有方法创建某种自定义反序列化程序

测试对象的示例可以是:

JObject obj = JObject.Parse(jsonString);
// now your obj contains field named "Test" that is of type object[]
// to retrieve informations you have to select "Test" token
JToken testToken = obj.SelectToken("Test");
// your token contains now something like " [{ "FirstBool" : 1, "aString" : "hello" }]"
// which basically is an array
// meaning that you have to iterate through this
foreach(var child in token.Children())
{
    // and convert it to a Test object
    Test test = JsonConvert.DeserializeObject<Test>(child.ToString());
    // test now is fully deserialized object
}
JObject obj=JObject.Parse(jsonString);
//现在,您的obj包含名为“Test”的字段,该字段的类型为object[]
//要检索信息,您必须选择“测试”标记
JToken testToken=obj.SelectToken(“测试”);
//您的令牌现在包含类似“[{“FirstBool”:1,“aString”:“hello”}”的内容
//基本上是一个数组
//这意味着您必须迭代这个过程
foreach(token.Children()中的var child)
{
//并将其转换为测试对象
Test=JsonConvert.DeserializeObject(child.ToString());
//现在测试是完全反序列化的对象
}

您确定
FirstBool
应该是
bool
?它是JSON中的一个
int
。我是否应该将
public List Test{get;set;}
更改为
public Test{get;set;}
呢?您根本不需要ResultObject!现在它只是一个包装器,让JsonConvert为您处理。根据您的建议,我是否应该将
public List Test{get;set;}
更改为
public Test{get;set;}
。我还没有阅读您的示例json字符串。现在,这应该可以正常工作了。非常感谢您精心解释的编辑答案:)工作得非常好。
JObject obj = JObject.Parse(jsonString);
// now your obj contains field named "Test" that is of type object[]
// to retrieve informations you have to select "Test" token
JToken testToken = obj.SelectToken("Test");
// your token contains now something like " [{ "FirstBool" : 1, "aString" : "hello" }]"
// which basically is an array
// meaning that you have to iterate through this
foreach(var child in token.Children())
{
    // and convert it to a Test object
    Test test = JsonConvert.DeserializeObject<Test>(child.ToString());
    // test now is fully deserialized object
}