powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос про JSON
25 сообщений из 32, страница 1 из 2
Вопрос про JSON
    #39931078
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть JSON-файл.
Код: xml
1.
2.
3.
4.
[{'Number': 1, 'Data': [{'X': 20, 'Y': 69}, {'X': 22, 'Y': 63}, {'X': 25, 'Y': 61}, {'X': 30, 'Y': 55}]},
 {'Number': 2, 'Data': [{'X': 33, 'Y': 49}, {'X': 35, 'Y': 44}, {'X': 39, 'Y': 40}, {'X': 40, 'Y': 36}]},
 ...
]


Есть код, который десериализирует данные с того файла.
C#
Код: 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;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

namespace Черновик_json4
{
    [DataContract]
    public class Number_and_data_array
    {
        [DataMember]
        public int Number { get; set; }

        [DataMember]
        public List<Data> Data { get; set; }

        public Number_and_data_array(int number, List<Data> data)
        {
            Number = number;
            Data = data;
        }
    }

    [DataContract]
    public class Data
    {
        [DataMember]
        public int X { get; set; }
        [DataMember]
        public int Y { get; set; }        

        public Data(int x, int y)
        {            
            X = x;
            Y = y;           
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var jsonFormatter = new DataContractJsonSerializer(typeof(List<Number_and_data_array>));

            using (var file = new FileStream("C:\\Users\\Acer\\Desktop\\json_file2.json", FileMode.OpenOrCreate))
           
            {
                var newNumber_and_data_array = jsonFormatter.ReadObject(file) as List<Number_and_data_array>;

                if (newNumber_and_data_array != null)
                {
                    foreach (var element1 in newNumber_and_data_array)
                    {                        
                        Console.WriteLine($"Number: {element1.Number}");
                    }
                }
            }

            Console.ReadKey();
        }
    }
}

На выделенной строке выдает ошибку:
System.Runtime.Serialization.SerializationException
Сообщение = Ошибка десериализации объекта типа System.Collections.Generic.List`1[[Черновик_json4.Number_and_data_array, Черновик json4, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]. Обнаружен непредвиденный символ "i".


Скажите, откуда символ i ? Его даже в коде нету. Как правильно написать?
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931082
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где у классов данных конструкторы по умолчанию?
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931139
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
судя по коду ошибки, где то есть символ 'i' в json'е, а не в коде.
парсер находит символ i и не знает, что с ним делать
про конструкторы уже написали, десериализатор должен уметь создавать экземпляр объекта
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931164
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
А где у классов данных конструкторы по умолчанию?
Так?
C#
Код: 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.
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

namespace Черновик_json4
{  
    [DataContract]
    public class Number_and_data_array
    {
        [DataMember]
        public int Number { get; set; }

        [DataMember]
        public List<Data> Data { get; set; }       

        public Number_and_data_array ()
        {
            //Number = 0;
            Data = new List<Data>();
        }

        public Number_and_data_array(int number, List<Data> data)
        {
            Number = number;
            this.Data = new List<Data>(data);
        }
    }

    [DataContract]
    public class Data
    {
        [DataMember]
        public int X { get; set; }
        [DataMember]
        public int Y { get; set; }

        public Data()
        {
            //
        }

        public Data(int x, int y)
        {            
            X = x;
            Y = y;           
        }               
    }

    class Program
    {
        static void Main(string[] args)
        {
            var jsonFormatter = new DataContractJsonSerializer(typeof(List<Number_and_data_array>));

            using (var file = new FileStream("C:\\Users\\Acer\\Desktop\\json_file2.json", FileMode.OpenOrCreate))
           
            {
                var newNumber_and_data_array = jsonFormatter.ReadObject(file) as List<Number_and_data_array>;

                if (newNumber_and_data_array != null)
                {
                    foreach (var element1 in newNumber_and_data_array)
                    {                        
                        Console.WriteLine($"Number: {element1.Number}");
                    }
                }
            }

            Console.ReadKey();
        }
    }
}

...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931174
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
судя по коду ошибки, где то есть символ 'i' в json'е, а не в коде.
парсер находит символ i и не знает, что с ним делать
про конструкторы уже написали, десериализатор должен уметь создавать экземпляр объекта
Если Вы имеете ввиду присутствие символа i в JSON-файле, то он отсутствует там. Во вложении сам JSON-файл.
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931176
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Так?
помогло?
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931177
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то я не вижу вызова метода Deserialize
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931179
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Вообще-то я не вижу вызова метода Deserialize
хотя да, судя по описанию, ReadObject десериализует сам
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931180
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
помогло?
Нет, также.
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931214
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а че кавычки одинарные?
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931224
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ï - это 0xEF, 0xEFBBBF это сигнатура UTF8 кодировки, ошибка говорит о том, что Reader' ожидает символ EF в BOM заголовке UTF8 и не находит его, после чего шлёт вас лесом.
но структура JSON Всё равно какая то кривая
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931232
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я зачекал ваш код и практика показала, что в файле json не должно быть BOM, окройте его в notepad и сохраните как UTF-8 (без BOM и будет вам счастье)
и надо заменить одинарные кавычки на двойные
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931237
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось!
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931249
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает даже без конструктора по умолчанию в классе Number_and_data_array .
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931264
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
но структура JSON Всё равно какая то кривая
Почему кривая? Как вы видите более правильную структуру?

Я пробую по разному писать JSON, пока остановился на таком варианте.

Например, ранее десериализировал для такого простого варианта
Код: xml
1.
2.
[{"X":20,"Y":69,"Number":1},{"X":22,"Y":63,"Number":1},{"X":25,"Y":61,"Number":1},{"X":30,"Y":55,"Number":1},
 {"X":33,"Y":49,"Number":2},{"X":35,"Y":44,"Number":2},{"X":39,"Y":40,"Number":2},{"X":40,"Y":36,"Number":2}]


Можно попробовать еще такой вариант. Но не уверен, что это оптимальный вариант.
Код: xml
1.
2.
3.
{"columns":["X","Y","Number"],
 "index":[0,1,2,3,4,5,6,7],
 "data":[[20,69,1],[22,63,1],[25,61,1],[30,55,1],[33,49,2],[35,44,2],[39,40,2],[40,36,2]]}
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931286
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь JSON-файл помещаю в ресурсы, чтобы не выгружать из внешнего файла.

Было так:
Код: c#
1.
2.
3.
...
using (var file = new FileStream("C:\\Users\\Acer\\Desktop\\jsonfile2.json", FileMode.OpenOrCreate))
...


Переписал так:
Код: c#
1.
2.
3.
4.
5.
...
using Черновик_json4.Properties;
...
using (var file = new FileStream(Resources.jsonfile2.ToString(), FileMode.OpenOrCreate)) //Visual Studio не выделяет эту строку как ошибочную
...


Теперь при запуске на строке
Код: pascal
1.
var newNumber_and_data_array = jsonFormatter.ReadObject(file) as List<Number_and_data_array>;

выдает ошибку:
System.Runtime.Serialization.SerializationException
Сообщение = Ожидается элемент "root" из пространства имен "".. Обнаружен "None" с именем "", пространство имен "".
Источник = System.Runtime.Serialization


Файл тот же самый, не редактировался.

Что тут не так?
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931306
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

нормально, это ROOT объект в котором находится список элементов Number_and_data_array
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931319
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
это ROOT объект в котором находится список элементов Number_and_data_array
То есть это происходит в этом месте
Код: c#
1.
var newNumber_and_data_array = jsonFormatter.ReadObject(file) as List<Number_and_data_array>;

Так?

Но почему, когда при внешнем файле - нормально работает, а с ресурса - не работает? Как правильно написать?
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931341
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Resources.jsonfile2.ToString() - вот это, что за бред вообще?
в ресурсах у вас файл или путь к файлу?
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931342
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931347
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тебе не нужен FileStream
Resources.jsonfile2 - это уже сам файл
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931348
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если так написать, то Visual Studio подчеркивает как ошибку.
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931350
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может стоит вчитаться в текст ошибки и сделать выводы?
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931422
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Может стоит вчитаться в текст ошибки и сделать выводы?
А так можно???
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931432
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе нет. Тебе разрешается только смотреть на типы параметров метода, когда открываешь скобку
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос про JSON
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]