powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / JSON. Многомерные массивы не поддерживаются
13 сообщений из 13, страница 1 из 1
JSON. Многомерные массивы не поддерживаются
    #40040986
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.
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
JSON. Многомерные массивы не поддерживаются
    #40041009
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

Как вы в JSON видите двухмерный массив? Покажите.
...
Рейтинг: 0 / 0
JSON. Многомерные массивы не поддерживаются
    #40041154
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JSON. Многомерные массивы не поддерживаются
    #40041170
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Теоретически так

Это не двумерный массив, а массив массивов. Сделай массив массивов и будет тебе так же
...
Рейтинг: 0 / 0
JSON. Многомерные массивы не поддерживаются
    #40041349
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробую делать через массив массивов
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
JSON. Многомерные массивы не поддерживаются
    #40041440
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
System.Runtime.Serialization.InvalidDataContractException: "Тип "jsontest.Data_Color+DataColors" не может быть сериализован. Пометьте его с помощью атрибута DataContractAttribute, а также пометьте все его члены, которые необходимо сериализовать, с помощью атрибута DataMemberAttribute. Если этот тип является коллекцией, пометьте его атрибутом CollectionDataContractAttribute.
и?
...
Рейтинг: 0 / 0
JSON. Многомерные массивы не поддерживаются
    #40041446
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
и?
Не понятно как дальше код писать. Атрибуты указаны. Над классом указывать как CollectionDataContract получается некорректно. Для DataListList атрибут CollectionDataMember не существует.
...
Рейтинг: 0 / 0
JSON. Многомерные массивы не поддерживаются
    #40041456
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а класса отсутствует конструктор по умолчанию, как вы его десериализовывать будите?
в C# есть куча сериализаторов Json, многим из которых вообще плевать на атрибуты
...
Рейтинг: 0 / 0
JSON. Многомерные массивы не поддерживаются
    #40041499
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, *будете
...
Рейтинг: 0 / 0
JSON. Многомерные массивы не поддерживаются
    #40041504
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

У тебя data_colors никто не знает как в жсон завернуть походу. А еще color должен быть uint8. 16 байт на цвет тебе не нужно.
...
Рейтинг: 0 / 0
JSON. Многомерные массивы не поддерживаются
    #40041515
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Атрибуты указаны
Где? У тебя класс DataColors без атрибутов вообще
...
Рейтинг: 0 / 0
JSON. Многомерные массивы не поддерживаются
    #40041536
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
JSON. Многомерные массивы не поддерживаются
    #40041613
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / JSON. Многомерные массивы не поддерживаются
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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