C# 解码包含JSON字符串的JSON字符串

C# 解码包含JSON字符串的JSON字符串,c#,json,json-deserialization,C#,Json,Json Deserialization,我必须解码一个包含另一个JSON字符串的JSON字符串。目前,我正在尝试使用Serializator将其解码到字典中。从System.Web.Script.Serialization反序列化(值),但没有成功 这是字符串: { "label": "Side", "options": [ { "key": "left", "value": 0 }, { "key":

我必须解码一个包含另一个JSON字符串的JSON字符串。目前,我正在尝试使用
Serializator将其解码到
字典中。从
System.Web.Script.Serialization
反序列化(值)
,但没有成功

这是字符串:

{
      "label": "Side",
      "options": [
        {
          "key": "left",
          "value": 0
        },
        {
          "key": "right",
          "value": 1
        }
      ]
}
这是我从解码器得到的格式错误:

(System.ArgumentException HResult=0x80070057消息=传入的对象无效,应为“:”或“}”。(34):{“标签”:“侧”,“选项”:“[{”键::“左”,“值”:0},{”键::“右”,“值”:1}]“}源=系统.Web.Extensions) 这意味着他将“[{”作为一个字符串,因此无法转换


我有没有办法解码这个特定的JSON字符串并将其存储在一个对象中?客户端对这个JSON格式非常具体……非常感谢

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

表示您的
json
,如下所示:

{
  "label": "Side",
  "options": "[{ 'key': 'left', 'value': '0'},{ 'key':'right', 'value':1}]"
}
 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);
带单引号的内部json

假设您有两个类:

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字符串,您可以这样提取它们:

{
  "label": "Side",
  "options": "[{ 'key': 'left', 'value': '0'},{ 'key':'right', 'value':1}]"
}
 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);
string json=“{\'label\”:\“Side\”,\“options\”:\“[{'key':'left','value':'0'},{'key':'right','value':1}]\”;
var jsonObj=JsonConvert.DeserializeObject(json);
var insideObj=jsoninvert.DeserializeObject(jsonObj.options);
p.S
这里使用了

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

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

并将所有的JSON存储在
字典
中。然后我将实现一种方法来解码JSON中的对象。接收无效的JSON似乎很痛苦……您可能必须将JSON预解析为可以传递给反序列化程序的内容。有一个指向jso的链接中的nlint。这是一个很好的验证和格式化工具。JSON字符串无效。请使用jsonlint对其进行更正。不起作用…当它到达第一个cuote时,反序列化程序认为这是字符串的结尾,并抛出错误,因为这是一种无效的结束JSON字符串的方法,用于表示您的<代码>json
这样(以字符串形式存储对象)在我看来与在任何地方使用object都是一样的:我同意你的观点。我刚才回答了他的问题:“……字符串上包含另一个json字符串”。只要我能从他们那里学到一些东西,我对否决票一点问题都没有(如果没有任何评论,这是不可能的)。