Декодировать строку JSON, содержащую строку JSON

2

Я должен декодировать строку 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
    Похоже, боль, которую вы получаете недействительным JSON ......
  • 0
    Возможно, вам придется предварительно проанализировать JSON во что-то, что может быть передано в десериализатор.
Показать ещё 2 комментария
Теги:
json-deserialization

3 ответа

1

Представьте свой 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);

PS здесь использовал Newtonsoft

  • 1
    Не работает ... как только он добирается до первого одиночного вызова, десериализатор считает, что это конец строки, и выдает ошибку, потому что это неверный способ завершения строки JSON.
  • 0
    Предложение представлять ваш json таким образом (и хранить объект в форме строки), на мой взгляд, находится на том же уровне, что и использование объекта везде: D
Показать ещё 1 комментарий
0

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

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

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

0

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

  • 0
    У меня нет проблем с отрицательным голосом, если я могу чему-то научиться у них (что невозможно без каких-либо комментариев).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню