Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
1
.NET 4.x

Десериализация JSON - Object property name expected

13.07.2015, 21:36. Показов 2405. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста. Пытаюсь сделать десериализацию JSON с помощью Newtonsoft.Json.
Eсть следующий запрос в формате JSON:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
response: {
count: 59,
items: [{
id: 28261334,
name: 'TJ',
screen_name: 'tj',
is_closed: 0,
type: 'page',
is_admin: 0,
is_member: 0,
photo_50: 'https://pp.vk.me/...f2c/06crfCSL1KY.jpg',
photo_100: 'https://pp.vk.me/...f2b/PI7kwl3zvtQ.jpg',
photo_200: 'https://pp.vk.me/...f2a/-XlzvdumPwQ.jpg'
}]
}
я создал следующие классы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[DataContract]
    public class GroupsGet
    {
        [DataMember(Name = "count")]
        public string count { get; set; }
        [DataMember(Name = "items")]
        public List<Items> items { get; set; }
    }
    [DataContract]
    public class Items
    {
        [DataMember(Name = "id")]
        public string id { get; set; }
        [DataMember(Name = "name")]
        public string name { get; set; }
        [DataMember(Name = "members_count")]
        public string members_count { get; set; }
    }
Десериализацию провожу следующим образом:
C#
1
2
3
4
5
6
7
if (response != null)
            {
                var strreader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                var responseToString = strreader.ReadToEnd();
                JToken token = JToken.Parse(responseToString);
                _groupsGet = token["response"][0].ToObject<GroupsGet>();
            }
Но получаю ошибку:
Accessed JObject values with invalid key value: 0. Object property name expected.
Как ее можно исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2015, 21:36
Ответы с готовыми решениями:

Microsoft Visual Studio: Code generation for property 'BackgroundImage' failed. Error was: 'Object reference not set to an instance of an object.'
вот такая штука вылетает при открытии формы в дизайнере. что это вообще означает и как я мог такого...

Ошибка при обработке 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...

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

Десериализация JSON из ВК без JSON.NET
JSON: { &quot;response&quot; : } Мой код: string json = тут текст из спойлера вначале;...

5
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
13.07.2015, 22:04 2
http://www.newtonsoft.com/json
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System.Collections.Generic;
using Newtonsoft.Json;
 
internal class Program
{
    private static void Main(string[] args)
    {
        var str = @"{
 
   'response': {
 
      'count': 59,
 
      'items': [
 
         {
 
            'id': 28261334,
 
            'name': 'TJ',
 
            'screen_name': 'tj',
 
            'is_closed': 0,
 
            'type': 'page',
 
            'is_admin': 0,
 
            'is_member': 0,
 
            'photo_50': 'https://pp.vk.me/...f2c/06crfCSL1KY.jpg',
 
            'photo_100': 'https://pp.vk.me/...f2b/PI7kwl3zvtQ.jpg',
 
            'photo_200': 'https://pp.vk.me/...f2a/-XlzvdumPwQ.jpg'
 
         }
 
      ]
 
   }
 
}
 
";
 
 
        var j = JsonConvert.DeserializeObject<MyClass>(str);
    }
}
 
public class Response
{
    public int count { get; set; }
    public List<Dictionary<string, string>> items { get; set; }
}
 
 
public class MyClass
{
    public Response response { get; set; }
}
Вложения
Тип файла: rar Json.rar (2.42 Мб, 2 просмотров)
1
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
13.07.2015, 22:36  [ТС] 3
А как быть если ответ от сервера приходит в JSON формате но с двойными кавычками? компилятор на разборку такого ответа ругается
JSON
1
2
3
4
5
6
7
8
9
10
11
{"response":
{"count":1,"items":[
{"id":12351955,"name":"group name",
"screen_name":"group name",
"is_closed":2,"type":"group",
"is_admin":1,"admin_level":3,
"is_member":1,"members_count":29,
"photo_50":"https:\/\/pp.vk.me\/c629102\/v629102433\/6109\/aOxIB232Zhc.jpg",
"photo_100":"https:\/\/pp.vk.me\/c629102\/v629102433\/6108\/2PwRxmJpy.jpg",
"photo_200":"https:\/\/pp.vk.me\/c629102\/v6292433\/6107\/VwNd1ZqoAo.jpg"
}]}}
0
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
13.07.2015, 22:44 4
Лучший ответ Сообщение было отмечено saverger как решение

Решение

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
using System.Collections.Generic;
using Newtonsoft.Json;
 
internal class Program
{
    private static void Main(string[] args)
    {
        var str = @"{""response"":
{""count"":1,""items"":[
{""id"":12351955,""name"":""group name"",
""screen_name"":""group name"",
""is_closed"":2,""type"":""group"",
""is_admin"":1,""admin_level"":3,
""is_member"":1,""members_count"":29,
""photo_50"":""https:\/\/pp.vk.me\/c629102\/v629102433\/6109\/aOxIB232Zhc.jpg"",
""photo_100"":""https:\/\/pp.vk.me\/c629102\/v629102433\/6108\/2PwRxmJpy.jpg"",
""photo_200"":""https:\/\/pp.vk.me\/c629102\/v6292433\/6107\/VwNd1ZqoAo.jpg""
}]}}";
 
        var j = JsonConvert.DeserializeObject<MyClass>(str);
    }
}
 
public class Response
{
    public int count { get; set; }
    public List<Dictionary<string, string>> items { get; set; }
}
 
 
public class MyClass
{
    public Response response { get; set; }
}
у меня не падает. Я сделал одинарные лиш для того что бы не экранировать или с @ не дублировать их...
Миниатюры
Десериализация JSON - Object property name expected  
1
3 / 3 / 1
Регистрация: 26.03.2012
Сообщений: 65
13.07.2015, 23:50  [ТС] 5
Спасибо, это я чет затупил с этими кавычками)

Добавлено через 36 минут
Можно ли это действие сделать без использования словаря, а с помощью коллекции List?
0
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
14.07.2015, 00:09 6
Лучший ответ Сообщение было отмечено saverger как решение

Решение

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
 
internal class Program
{
    private static void Main(string[] args)
    {
        var str = @"{
 
   'response': {
 
      'count': 59,
 
      'items': [
 
         {
 
            'id': 28261334,
 
            'name': 'TJ',
 
            'screen_name': 'tj',
 
            'is_closed': 0,
 
            'type': 'page',
 
            'is_admin': 0,
 
            'is_member': 0,
 
            'photo_50': 'https://pp.vk.me/...f2c/06crfCSL1KY.jpg',
 
            'photo_100': 'https://pp.vk.me/...f2b/PI7kwl3zvtQ.jpg',
 
            'photo_200': 'https://pp.vk.me/...f2a/-XlzvdumPwQ.jpg'
 
         }
 
      ]
 
   }
 
}
 
";
 
        var j = JsonConvert.DeserializeObject<MyClass>(str);
    }
}
 
public class Response
{
    public int count { get; set; }
    public List<Item> items { get; set; }
}
 
public class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Screen_Name { get; set; }
    
    public int Is_Closed { get; set; }
    public string Type { get; set; }
    public int Is_Admin { get; set; }
    public int Is_Member { get; set; }
    public string Photo_50 { get; set; }
    public string Photo_100 { get; set; }
    public string Photo_200 { get; set; }
}
 
 
public class MyClass
{
    public Response Response { get; set; }
}
1
14.07.2015, 00:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2015, 00:09
Помогаю со студенческими работами здесь

Expected Sub, Function, or Property
If CStr(Cells(3, j)) = &quot;&quot; Then N = j - l Exit Do ' Âûõîä èç öèêëà Else j -j + 1 ' Óâåëè÷åíèå...

ошибка ...denotes a ''property'' where a ''method'' was expected
Ошибка:C:InetpubwwwrootAspdotnetWebUserControl1.ascx.cs(43): ''System.Data.DataSet.Tables'' denotes...

[Object object] вместо перевода JSON массива
Всем привет. ДАНО: Есть массив в php куда я запихал все строки таблицы mysql, а затем перевел их в...

Десериализация Xml to Object
Добрый день подскажите как десериализовать XmlDocumet . У меня есть XmlDocument &lt;MYPARAM...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru