解码包含JSON字符串

时间:2018-10-30 10:05:38

标签: c# json json-deserialization

我必须解码一个包含另一个JSON字符串的JSON字符串。目前,我正在尝试使用Dictionary<string,string>中的Serializator.Deserialize<Dictionary<string,string>>(value)将其解码为System.Web.Script.Serialization,但没有成功。

这是字符串:

{
      "label": "Side",
      "options": [
        {
          "key": "left",
          "value": 0
        },
        {
          "key": "right",
          "value": 1
        }
      ]
}

这是我从解码器得到的格式错误:

  

(System.ArgumentException HResult = 0x80070057 Message =传入了无效的对象,预期为':'或'}'。(34):{“ label”:“ Side”,“ options”:“ [{” key“: “ left”,“ value”:0},{“ key”:“ right”,“ value”:1}]“} Source = System.Web.Extensions)   这意味着他将“ [{”作为字符串获取,因此当然无法转换...

有什么办法可以解码此特定的JSON字符串并将其存储在对象中?客户端对此JSON格式非常具体...非常感谢

3 个答案:

答案 0 :(得分:1)

这样代表您的json

{
  "label": "Side",
  "options": "[{ 'key': 'left', 'value': '0'},{ 'key':'right', 'value':1}]"
}

内部带有单引号的

让我们假设您有这两个类:

public class YourObject
    {
        public string label { get; set; }
        public string options { get; set; }
    }
    public class InsideObject
    {
        public string key { get; set; }
        public int value { get; set; }
    }

所以您的json在键“ options” 下有另一个json作为字符串,您可以像这样提取它们两个:

 string json = "{\"label\": \"Side\", \"options\": \"[{ 'key': 'left', 'value': '0'},{ 'key':'right', 'value':1}]\"}";
 var jsonObj = JsonConvert.DeserializeObject<YourObject>(json);
 var insideObj = JsonConvert.DeserializeObject<InsideObject>(jsonObj.options);

PS 在这里使用Newtonsoft

答案 1 :(得分:0)

最后,我使用如下字符串格式:

{
  "label": "Side",
  "options": [
    {
      "key": "left",
      "value": 0
    },
    {
      "key": "right",
      "value": 1
    }
  ]
}

并将所有 JSON 存储在Dictionary< string, object >中。然后,我将实现一种方法来解码 JSON 中的对象。

答案 2 :(得分:-1)

正如Matt在评论中已经提到的那样,您的JSON无效,而不是"[{"key"应该是[{"key",而不是}]"}应该是}]}