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
}