Декодировать строку JSON, содержащую строку JSON - PullRequest
0 голосов
/ 30 октября 2018

Мне нужно декодировать строку 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 Сообщение = Передан недопустимый объект, ожидается ':' или '}'. (34): {"label": "Side", "options": "[{" key ": "left", "value": 0}, {"key": "right", "value": 1}] "} Source = System.Web.Extensions) Это означает, что он получает "[{" в виде строки и, следовательно, не может преобразовать, конечно ...

Есть ли способ, как я могу декодировать эту конкретную строку JSON и сохранить ее в объекте? Клиент очень специфичен в этом формате JSON ... Большое спасибо

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Представьте ваши json так:

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

внутри 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 есть еще один json в виде строки под ключом "options" , и вы можете извлечь их обоих так:

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

P.S здесь используется Newtonsoft

0 голосов
/ 30 октября 2018

Наконец я использовал формат строки следующим образом:

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

и сохраните все JSON в Dictionary< string, object >. Затем я реализую метод для декодирования объекта внутри JSON .

0 голосов
/ 30 октября 2018

Как уже упоминал Мэтт в своем комментарии, ваш JSON недействителен, вместо "[{"key" это должно быть [{"key", а вместо }]"} должно быть }]}.

...