Перетворити рядок JSON в об'єкт JSON c #


161

Цей рядок у моїй базі даних зберігається:

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

Цей рядок вже є у форматі JSON, але я хочу перетворити його в JObject або JSON Object.

JObject json = new JObject();

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

Відповіді:



62

якщо ви не хочете або вам потрібен набраний об'єкт, спробуйте:

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

або спробуйте для введеного об'єкта спробуйте:

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

Це також буде працювати зі списком T, якщо вхідний рядок json містить колекцію: Список <Foo> json = JsonConvert.DeserializeObject <Список <Foo>> (str)
А. Варма

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

поки це не відповідає на питання. це масивний інструмент економії часу.
Валама



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.