C# 如何将字符串反序列化为JSON?
我的想法是,我想获取我的字符串,将其转换为JSON对象,然后通过C# 如何将字符串反序列化为JSON?,c#,json,serialization,C#,Json,Serialization,我的想法是,我想获取我的字符串,将其转换为JSON对象,然后通过结果数组循环,以提取所有id字段,并将它们放在一个单独的数组中 我尝试了多个“C#字符串到JSON示例”,但通过这段特定的代码,我获得了最远的结果 主要内容: String myString=”{ “总数”:111, “令牌”:“abcdefghijklmn”, “结果”:[ { “id”:“001”, “一些东西”:{ “aValue”:0, “b值”:1 } }, { “id”:“001”, “一些东西”:{ “aValue”:
结果
数组循环,以提取所有id
字段,并将它们放在一个单独的数组中
我尝试了多个“C#字符串到JSON示例”,但通过这段特定的代码,我获得了最远的结果
主要内容:
String myString=”{
“总数”:111,
“令牌”:“abcdefghijklmn”,
“结果”:[
{
“id”:“001”,
“一些东西”:{
“aValue”:0,
“b值”:1
}
},
{
“id”:“001”,
“一些东西”:{
“aValue”:0,
“b值”:1
}
},
{
“id”:“001”,
“一些东西”:{
“aValue”:0,
“b值”:1
}
},
],
“Whatdido”:{
“iRetrieve”:“是”
}
}";
var list=JsonConvert.DeserializeObject(myString);
课程:
public class IdReturn
{
public int total { get; set; }
public string token { get; set; }
public List<Attribute> results { get; set; }
}
public class results
{
public string id { get; set; }
public string some_stuff { get; set; }
}
public类IdReturn
{
公共整数总计{get;set;}
公共字符串标记{get;set;}
公共列表结果{get;set;}
}
公开课成绩
{
公共字符串id{get;set;}
公共字符串some_stuff{get;set;}
}
预期结果是一个JSON对象,我可以使用它作为:list.results[I].id来获取每个id。我从上面的代码中得到的错误消息是:
未处理的异常:Newtonsoft.Json.JsonSerializationException:无法将当前Json对象(例如{“名称”:“值”})反序列化为类型“System.Collections.Generic.List`1[myExample.IdReturn]”,因为该类型需要Json数组(例如[1,2,3])才能正确反序列化。
若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或更改反序列化类型,使其成为可以从JSON对象反序列化的正常.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化
首先,您的字符串未写入有效的C#,它应该是:
String myString = @"{
""total"": 111,
""token"": ""abcdefghijklmn"",
""results"": [
{
""id"": ""001"",
""some_stuff"": {
""aValue"": 0,
""bValue"": 1
}
},
{
""id"": ""001"",
""some_stuff"": {
""aValue"": 0,
""bValue"": 1
}
},
{
""id"": ""001"",
""some_stuff"": {
""aValue"": 0,
""bValue"": 1
}
},
],
""whatdidido"": {
""iretrieved"": ""yes""
}
}";
接下来,您需要一组结构:
public class Rootobject
{
public int total { get; set; }
public string token { get; set; }
public Result[] results { get; set; }
public Whatdidido whatdidido { get; set; }
}
public class Whatdidido
{
public string iretrieved { get; set; }
}
public class Result
{
public string id { get; set; }
public Some_Stuff some_stuff { get; set; }
}
public class Some_Stuff
{
public int aValue { get; set; }
public int bValue { get; set; }
}
最后,要反序列化它并打印每个id
,您可以执行以下操作:
var root = JsonConvert.DeserializeObject<Rootobject>(myString);
Console.WriteLine(string.Join(",", root.results.Select(item => item.id)));
首先澄清一些术语。JSON是一个字符串。没有JSON对象(尽管在这一点上您得到的错误消息令人困惑)。您希望将字符串(JSON)转换为.Net objectchange public class results to public class属性。还可以为一些具有2个整数属性的东西创建一个新类。并将公共字符串some_stuff{get;set;}更改为public SomeStuff some_stuff{get;set;}您不能反序列化为
List
,因为您的JSON不表示集合,它只表示一个对象。因此,您应该反序列化到IdReturn
。那么属性result
的类是Attribute
而不是代码中显示的results
类。
var root = JsonConvert.DeserializeObject<Rootobject>(myString);
Console.WriteLine(string.Join(",", root.results.Select(item => item.id)));
001,001,001