C# 如何从JSON字符串中提取这些值

C# 如何从JSON字符串中提取这些值,c#,json,deserialization,C#,Json,Deserialization,我有这个JSON字符串,但不确定如何解析其中的值: 有 has2 我确实成功地正确解析出了“id”,但不确定如何访问: CORS CORS2 CORS3 CORS4 我得到错误: '无法将当前JSON对象(例如{“name”:“value”})反序列化为类型“System.String[]”,因为该类型需要JSON数组(例如[1,2,3]) 我已将JSON粘贴到pastebin中: 我的守则如下: public void getInfo() { String JSONstring =

我有这个JSON字符串,但不确定如何解析其中的值:

has2

我确实成功地正确解析出了“id”,但不确定如何访问:
CORS
CORS2
CORS3
CORS4

我得到错误:
'无法将当前JSON对象(例如{“name”:“value”})反序列化为类型“System.String[]”,因为该类型需要JSON数组(例如[1,2,3])

我已将JSON粘贴到pastebin中:

我的守则如下:

public void getInfo()
{
    String JSONstring = "{ id: 'hello', name: 'Hello',has:{ CORS: false,CORS2: true},has2:{ CORS3: false,CORS4: true}}"; 
    String id = ""; List<String> has = new List<String>(); List<String> has2 = new List<String>();

    var deserializedTicker = JsonConvert.DeserializeObject<JsonInfo>(JSONstring);
    id = deserializedTicker.id; 
    has = deserializedTicker.has.ToList();
    has2 = deserializedTicker.has.ToList();
}

public class JsonInfo
{
    public String id { get; set; }
    public String[] has { get; set; }
    public String[] has2 { get; set; }
}

您的json不正确,密钥
包含一个dict no列表

您需要将反序列化更改为字典或更改json

这里您可以看到一个示例:

在JSON中,
has
是一个对象,而不是数组。您应该对类进行建模,以支持包含属性
CORS
CORS2
等的对象


编辑:如果您想坚持使用
has
作为一个数组,您应该更改JSON以匹配数组所期望的内容,这可能类似于:
has:[false,true]
,并忽略CORS内容。

首先,让我们更正JSON:

{ 
  "id": "hello", 
  "name": "Hello",
  "has": { 
    "CORS": false,
    "CORS2": true
  },
  "has2": { 
    "CORS3": false,
    "CORS4": true
  }
}
现在,您遇到的问题是,您正试图将
“has”
“has2”
中的值反序列化为数组。在JSON中,它们不是数组;它们是物体。因此,您需要定义具有相同属性的新类,以便正确地反序列化JSON:

public class JsonInfo 
{
  public string id { get; set; }
  public string name { get; set; }
  public JsonHasInfo has { get; set; }
  public JsonHas2Info has2 { get; set; }
}

public class JsonHasInfo
{
  public bool CORS { get; set; }
  public bool CORS2 { get; set; }
}

public class JsonHas2Info
{
  public bool CORS3 { get; set; }
  public bool CORS4 { get; set; }
}
现在,您应该能够正确地反序列化(正确的)JSON:

String JSONstring = "{ \"id\": \"hello\", \"name\": \"Hello\", \"has\": { \"CORS\": false, \"CORS2\": true }, \"has2\": { \"CORS3\": false, \"CORS4\": true } }\";"
var deserializedTicker = JsonConvert.DeserializeObject<JsonInfo>(JSONstring);
String JSONstring=“{\'id\':\'hello\',\'name\':\'hello\',\'has\':{\'CORS\':false,\'CORS2\':true},\'has2\':{\'CORS3\':false,\'CORS4\':true}”;"
var deserializedTicker=JsonConvert.DeserializeObject(JSONstring);

您的代码片段和pastebin链接中的JSON字符串都不是有效的JSON。请看我对您的另一个问题的评论:几个小时前的评论。该评论也适用于这里。您在这里有点重复您的错误…has和has2不是设置的字符串或数组,它们是复杂的对象,您需要对它们进行反序列化,或者使用动态或JObjectI重新格式化您的代码块。由于这是C#(而不是javascript),您需要使用带有{}的图标符号来格式化您的代码,而不是将其格式化为javascript的代码。只需将JSON粘贴到您的问题中即可;没有理由让人们访问其他网站。是的,我尝试使用dynamic和object进行一种方法。我确实编辑了我的帖子,添加了这种方法,但也出现了一些错误。现在我明白了。该代码有效。我尝试获得一个挂起所有的场景。所以它不是一个数组,因为我认为它是一个对象。所以我确实遵循你如何设置代码这么好。非常感谢你的帮助!