繁体   English   中英

如何将字符串反序列化为JSON?

[英]How can I deserialize my string into JSON?

我的想法是我要获取我的字符串,将其转换为JSON对象,然后遍历results数组以提取所有id字段并将它们放在单独的数组中。

我已经尝试了多个“ C#字符串转换为JSON示例”,但是在这部分特定代码中使用得最远。

主要:

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"
  }
}";

var list = JsonConvert.DeserializeObject<List<IdReturn>>(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; }
 }

预期的结果是一个JSON对象,我可以将其用作:list.results [i] .id以获取每个id。 从上面的代码中得到的错误消息是:

未处理的异常:Newtonsoft.Json.JsonSerializationException:无法将当前JSON对象(例如{“ name”:“ value”})反序列化为类型'System.Collections.Generic.List`1 [myExample.IdReturn]',因为该类型需要一个JSON数组(例如[1,2,3])可正确反序列化。 要解决此错误,可以将JSON更改为JSON数组(例如[1,2,3]),也可以更改反序列化类型,使其成为普通的.NET类型(例如,不像整数这样的原始类型,也不像这样的集合类型)数组或列表),可以从JSON对象反序列化。 还可以将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""
  }
}";

接下来,您需要一组类来表示JSON结构:

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)));

对于您的示例,这将导致:

001,001,001

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM