Преобразовать строку JSON в объект JSON c #


161

У меня есть эта строка хранится в моей базе данных:

str = "{ "context_name": { "lower_bound": "value", "upper_bound": "value", "values": [ "value1", "valueN" ] } }"

Эта строка уже в формате JSON, но я хочу преобразовать ее в объект JObject или JSON.

JObject json = new JObject();

Я попробовал json = (JObject)str;актерский состав, но это не сработало, так как я могу это сделать?

Ответы:


298

JObjectопределяет метод Parseдля этого:

JObject json = JObject.Parse(str);

Возможно, вы захотите обратиться к документации Json.NET .


5
Это преобразует в {строку}, добавит дополнительные фигурные скобки к вашей строке.
Василь Вальчев

62

если вы не хотите или нуждаетесь в типизированном объекте, попробуйте:

using Newtonsoft.Json;
// ...   
dynamic json  = JsonConvert.DeserializeObject(str);

или попробуйте для типизированного объекта попробуйте:

Foo json  = JsonConvert.DeserializeObject<Foo>(str)

Это также будет работать со списком T, если входящая строка json содержит коллекцию: List <Foo> json = JsonConvert.DeserializeObject <List <Foo >> (str)
A. Varma

22

Это работает

    string str = "{ 'context_name': { 'lower_bound': 'value', 'pper_bound': 'value', 'values': [ 'value1', 'valueN' ] } }";
    JavaScriptSerializer j = new JavaScriptSerializer();
    object a = j.Deserialize(str, typeof(object));

пространство имен для JavaScriptSerializer: System.Web.Script.Serialization;
BernieSF

Определенно работал для меня. Использование JObject после замены двойных кавычек для одинарных кавычек, добилось цели. Спасибо!!!
Карлос Парра

System.Web.Script.Serialization доступен только в полной версии .Net.
Норги

7

есть интересный способ достичь другой цели, которая заключается в том, чтобы иметь основанную на типе json базу классов с очень мощными инструментами, которые я впервые использовал несколько дней назад, чтобы перевести результат tradedoubler json в классы

Это простой инструмент: скопируйте исходную пасту json, и через несколько секунд вы получите строго типизированный класс, ориентированный на json . Таким образом, вы будете использовать эти классы, которые являются более мощными и простыми в использовании.

Я надеюсь, что это может помочь вам


Как раз то, что мне нужно! так что мне не нужно определять сложную структуру класса из чего-то, созданного в javascript
NicolasZ

пока это не отвечает на вопрос. это огромный инструмент для экономии времени.
Валамас


1

Это работает для меня, используя JsonConvert

var result = JsonConvert.DeserializeObject<Class>(responseString);

0

Это не работает в случае JObject, это работает для простых данных формата json. Я пытался десериализовать данные в приведенном ниже формате json, но не получил ответ.

Для этого Джсон

{
  "Customer": {
    "id": "Shell",
    "Installations": [
      {
        "id": "Shell.Bangalore",
        "Stations": [
          {
            "id": "Shell.Bangalore.BTM",
            "Pumps": [
              {
                "id": "Shell.Bangalore.BTM.pump1"
              },
              {
                "id": "Shell.Bangalore.BTM.pump2"
              },
              {
                "id": "Shell.Bangalore.BTM.pump3"
              }
            ]
          },
          {
            "id": "Shell.Bangalore.Madiwala",
            "Pumps": [
              {
                "id": "Shell.Bangalore.Madiwala.pump4"
              },
              {
                "id": "Shell.Bangalore.Madiwala.pump5"
              }
            ]
          }
        ]
      }
    ]
  }
}

0

Если ваша строка JSon имеет "" двойную кавычку вместо одинарной кавычки "и \ n в качестве индикатора следующей строки, вам нужно удалить ее, потому что это неправильная строка JSon, например, как показано ниже:

            SomeClass dna = new SomeClass ();
            string response = wc.DownloadString(url);
            string strRemSlash = response.Replace("\"", "\'");
            string strRemNline = strRemSlash.Replace("\n", " ");
            // Time to desrialize it to convert it into an object class.
            dna = JsonConvert.DeserializeObject<SomeClass>(@strRemNline);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.