0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
1

Десериализовать JSON

09.11.2018, 11:36. Показов 359. Ответов 1
Метки нет (Все метки)

Помогите десериализовать JSON. Нужны id и name из quests
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var json = 
{
     "obj":{"order":["q957","q479","q214"],
            "quests":{
                         "q214":{"width":10,"name":"Телефон","id":"q214","type":"free"},
                         "q479":{"width":15,"name":"Имя","type":"free","id":"q479"},
                         "q957":{"width":100,"name":"Город","id":"q957","type":"free"}
                    },
            "id":"a525",
            "param":{"system":0,"name":"Данные пользователя", "multi":0}},
     "request.id":"fake-EC06814E-E35B-11E8-B22D-F854389B935E",
     "duration":0.042354,
     "_ehid":"212432.23074209719.1541684457"
}
Максимум что получилось - получить quests, дальше не знаю как.

C#
1
2
3
4
5
6
7
8
9
10
11
    class Form
    {
        public Obj Obj { get; set; }
    }
 
    class Obj
    {
        public object Quests { get; set; }
    }
 
Form quests = JsonConvert.DeserializeObject<Form>(json);
Добавлено через 1 час 51 минуту
пока такой вариант:


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
                      foreach (var root in GetDeserialized<Dictionary<string, dynamic>>(json))
                        {
                            if (root.Key == "obj")
                            {
                                foreach (var obj in GetDeserialized<Dictionary<string, dynamic>>(root.Value.ToString()))
                                {
                                    if (obj.Key == "quests")
                                    {
                                        foreach (var quest in GetDeserialized<Dictionary<string, dynamic>>(obj.Value.ToString()))
                                        {
                                            string questJSON = quest.Value.ToString().Replace("\r\n", string.Empty);
                                            Quest questObj = GetDeserialized<Quest>(questJSON);
                                            forms.Add(new Form(questObj.Id, questObj.Name));
                                        }
                                    }
                                }
                            }
                        }
 
        private T GetDeserialized<T>(string source)
        {
            return JsonConvert.DeserializeObject<T>(source);
        }
Как упростить? Сделать через LINQ можно? Как-то ещё?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2018, 11:36
Ответы с готовыми решениями:

Как правильно десериализовать ответ в Json
Как правильно десериализовать ответ в Json (С вложенными классами) используя библиотеку...

Какие объекты можно сериализовать и десериализовать в XML / JSON?
Здравствуйте. Как можно определять какие объекты можно серилизовать и десирилизовать в XML или...

Не могу десериализовать json-строку(как правильнее десериализировать, чтобы считать данные)?
json-строка: &quot;Information1&quot;: } десериализовал через json2csharp: public class ABC ...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Дополнительные сведения: Cannot deserialize the current JSON object (e.g. {&quot;name&quot;:&quot;value&quot;}) into...

1
102 / 24 / 12
Регистрация: 12.12.2013
Сообщений: 207
Записей в блоге: 1
09.11.2018, 13:35 2
Цитата Сообщение от olegall Посмотреть сообщение
Как упростить? Сделать через LINQ можно? Как-то ещё?
Ваши объекты
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
   public class RootObj
    {
        [JsonProperty(PropertyName = "obj")]
        public Obj Obj { get; set; }
        [JsonProperty(PropertyName = "request.id")]
        public string RequestId { get; set; } 
        [JsonProperty(PropertyName = "duration")]
        public double Duration { get; set; }
        [JsonProperty(PropertyName = "_ehid")]
        public string Ehid { get; set; }
    }
 
    public class Obj
    { 
        [JsonProperty(PropertyName = "order")]
        public string[] Order { get; set; }
        [JsonProperty(PropertyName = "quests")]
        public Dictionary<string, Quest> Quests { get; set; }
        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; }
        [JsonProperty(PropertyName = "param")]
        public Param Param { get; set; }
    }
 
    public class Quest
    {
        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; }
        [JsonProperty(PropertyName = "width")]
        public int Width { get; set; }
        [JsonProperty(PropertyName = "name")]
        public string Name { get; set; }
        [JsonProperty(PropertyName = "type")]
        public string Type { get; set; }
    }
    public class Param
    {
        [JsonProperty(PropertyName = "system")]
        public int System { get; set; }
        [JsonProperty(PropertyName = "name")]
        public string Name { get; set; }
        [JsonProperty(PropertyName = "multi")]
        public int Multi { get; set; }
    }


Ну и собственно магия
C#
1
 var result = JsonConvert.DeserializeObject<RootObj>(data);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2018, 13:35

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Всем привет! Помогите, плиз, разобраться с ошибкой: An unhandled exception of type...

Подскажите как десериализовать
Подскажите как десериализовать координаты { &quot;id&quot;: 1270260, &quot;name&quot;: &quot;State of...

Как правильно сереализовать и десериализовать.
помогите, пожалуйста, советом. Я сереализую структуру в одном проекте, а десереализую в другом. При...

Десериализовать ответ с веб-сервиса
Здравствуйте! Имеется списока List&lt;MyClass&gt;. class MyClass { public int id; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.