Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / JSON. Многомерные массивы не поддерживаются / 13 сообщений из 13, страница 1 из 1
02.02.2021, 21:09
    #40040986
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
Здравствуйте!

Есть такой код, который сериализирует объекты в JSON в файл.
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.
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

namespace jsontest
{
    [DataContract]
    class Data_Color
    {
        [DataMember]
        public DataColors[,] Colors { get; set; }
        [DataMember]
        public Int32 Marker { get; set; }

        private readonly Random rnd = new Random(DateTime.Now.Millisecond);

        public Data_Color(Int32 width, Int32 height)
        {
            this.Colors = new DataColors[width, height];

            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    this.Colors[i, j] = new DataColors();

                    this.Colors[i, j].ColorR = rnd.Next(0, 255);
                    this.Colors[i, j].ColorG = rnd.Next(0, 255);
                    this.Colors[i, j].ColorG = rnd.Next(0, 255);
                }
            }

            this.Marker = rnd.Next(0, 10);
        }

        public class DataColors
        {
            public Int32 ColorR { get; set; }
            public Int32 ColorG { get; set; }
            public Int32 ColorB { get; set; }            
        }        
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            List<Data_Color> dataList = new List<Data_Color>();
            Int32 Width = 6;
            Int32 Height = 6;

            dataList.Add(new Data_Color(Width, Height));
            dataList.Add(new Data_Color(Width, Height));
            dataList.Add(new Data_Color(Width, Height));

            string pathjson = "C:\\Users\\Acer\\Desktop\\ColorTest.json";

            var jsonFormatter = new DataContractJsonSerializer(typeof(List<Data_Color>));

            using (var file = new FileStream(pathjson, FileMode.OpenOrCreate))
            {
                jsonFormatter.WriteObject(file, dataList);
            }

            Console.ReadKey();
        }
    }
}

В выделенной строке выдаёт ошибку Сообщение = Многомерные массивы не поддерживаются.

Скажите, как это можно обойти?
...
Рейтинг: 0 / 0
03.02.2021, 00:04
    #40041009
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
ferzmikk,

Как вы в JSON видите двухмерный массив? Покажите.
...
Рейтинг: 0 / 0
03.02.2021, 14:10
    #40041154
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
hVostt
ferzmikk,

Как вы в JSON видите двухмерный массив? Покажите.

Теоретически так
Код: xml
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.
[
    {'Colors': [
                    [
                        {'ColorR': 221, 'ColorG': 226, 'ColorB': 245,  'ColorGrayscale': 226, },
                        {'ColorR': 218, 'ColorG': 224, 'ColorB': 240,  'ColorGrayscale': 224, }
                    ],
                    [
                        {'ColorR': 221, 'ColorG': 226, 'ColorB': 245,  'ColorGrayscale': 226, },
                        {'ColorR': 218, 'ColorG': 224, 'ColorB': 240,  'ColorGrayscale': 224, }
                    ]
               ],
    'Marker': 1},
    {'Colors': [
                    [
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244, 'ColorGrayscale': 225, },
                        {'ColorR': 221, 'ColorG': 226, 'ColorB': 245, 'ColorGrayscale': 226, }
                    ],
                    [
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244, 'ColorGrayscale': 225, },
                        {'ColorR': 221, 'ColorG': 226, 'ColorB': 245, 'ColorGrayscale': 226, }
                    ]
                ],
    'Marker': 2},
    {'Colors': [
                    [
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244,  'ColorGrayscale': 225, },
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244,  'ColorGrayscale': 225, }
                    ],
                    [
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244,  'ColorGrayscale': 225, },
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244,  'ColorGrayscale': 225, }
                    ]
               ],
    'Marker': 3},
    {'Colors': [
                    [
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244,  'ColorGrayscale': 225, },
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244,  'ColorGrayscale': 225, }
                    ],
                    [
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244,  'ColorGrayscale': 225, },
                        {'ColorR': 220, 'ColorG': 225, 'ColorB': 244,  'ColorGrayscale': 225, }
                    ]
           ],
    'Marker': 1}
]

...
Рейтинг: 0 / 0
03.02.2021, 14:37
    #40041170
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
ferzmikk
Теоретически так

Это не двумерный массив, а массив массивов. Сделай массив массивов и будет тебе так же
...
Рейтинг: 0 / 0
03.02.2021, 20:33
    #40041349
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
Пробую делать через массив массивов
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.
75.
76.
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

namespace jsontest
{
    [DataContract]
    class Data_Color
    {
        [DataMember]
        public List<List<DataColors>> Colors { get; set; }
        [DataMember]
        public Int32 Marker { get; set; }

        private readonly Random rnd = new Random(DateTime.Now.Millisecond);

        public Data_Color(Int32 width, Int32 height)
        {
            this.Colors = new List<List<DataColors>>();

            for (int i = 0; i < width; i++)
            {
                var dim = new List<DataColors>();

                for (int j = 0; j < height; j++)
                {
                    var data = new DataColors();

                    data.ColorR = rnd.Next(0, 255);
                    data.ColorG = rnd.Next(0, 255);
                    data.ColorB = rnd.Next(0, 255);

                    dim.Add(data);
                }

                Colors.Add(dim);
            }

            this.Marker = rnd.Next(0, 10);
        }

        public class DataColors
        {
            public Int32 ColorR { get; set; }
            public Int32 ColorG { get; set; }
            public Int32 ColorB { get; set; }
        }       
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            List<Data_Color> dataList = new List<Data_Color>();
            Int32 Width = 6;
            Int32 Height = 6;

            dataList.Add(new Data_Color(Width, Height));
            dataList.Add(new Data_Color(Width, Height));
            dataList.Add(new Data_Color(Width, Height));

            string pathjson = "C:\\Users\\Acer\\Desktop\\ColorTest.json";

            var jsonFormatter = new DataContractJsonSerializer(typeof(List<Data_Color>));

            using (var file = new FileStream(pathjson, FileMode.OpenOrCreate))
            {
                jsonFormatter.WriteObject(file, dataList);
            }

            Console.ReadKey();
        }
    }
}

Выдает сообщение:
System.Runtime.Serialization.InvalidDataContractException: "Тип "jsontest.Data_Color+DataColors" не может быть сериализован. Пометьте его с помощью атрибута DataContractAttribute, а также пометьте все его члены, которые необходимо сериализовать, с помощью атрибута DataMemberAttribute. Если этот тип является коллекцией, пометьте его атрибутом CollectionDataContractAttribute.
...
Рейтинг: 0 / 0
04.02.2021, 09:47
    #40041440
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
ferzmikk
System.Runtime.Serialization.InvalidDataContractException: "Тип "jsontest.Data_Color+DataColors" не может быть сериализован. Пометьте его с помощью атрибута DataContractAttribute, а также пометьте все его члены, которые необходимо сериализовать, с помощью атрибута DataMemberAttribute. Если этот тип является коллекцией, пометьте его атрибутом CollectionDataContractAttribute.
и?
...
Рейтинг: 0 / 0
04.02.2021, 10:08
    #40041446
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
Shocker.Pro
и?
Не понятно как дальше код писать. Атрибуты указаны. Над классом указывать как CollectionDataContract получается некорректно. Для DataListList атрибут CollectionDataMember не существует.
...
Рейтинг: 0 / 0
04.02.2021, 10:28
    #40041456
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
а класса отсутствует конструктор по умолчанию, как вы его десериализовывать будите?
в C# есть куча сериализаторов Json, многим из которых вообще плевать на атрибуты
...
Рейтинг: 0 / 0
04.02.2021, 11:53
    #40041499
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
Roman Mejtes, *будете
...
Рейтинг: 0 / 0
04.02.2021, 11:58
    #40041504
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
ferzmikk,

У тебя data_colors никто не знает как в жсон завернуть походу. А еще color должен быть uint8. 16 байт на цвет тебе не нужно.
...
Рейтинг: 0 / 0
04.02.2021, 12:23
    #40041515
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
ferzmikk
Атрибуты указаны
Где? У тебя класс DataColors без атрибутов вообще
...
Рейтинг: 0 / 0
04.02.2021, 12:53
    #40041536
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        [DataContract]
        public class DataColors
        {
            [DataMember]
            public Int32 ColorR { get; set; }
            [DataMember]
            public Int32 ColorG { get; set; }
            [DataMember]
            public Int32 ColorB { get; set; }
        }


Теперь работает.
...
Рейтинг: 0 / 0
04.02.2021, 14:56
    #40041613
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Многомерные массивы не поддерживаются
Спасибо!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / JSON. Многомерные массивы не поддерживаются / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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