Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字符串反序列化为JSON?_C#_Json_Serialization - Fatal编程技术网

C# 如何将字符串反序列化为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”:

我的想法是,我想获取我的字符串,将其转换为JSON对象,然后通过
结果
数组循环,以提取所有
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