powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос про JSON
7 сообщений из 32, страница 2 из 2
Вопрос про JSON
    #39931449
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишет такую ошибку:
Аргумент 1: не удается преобразовать из "byte[]" в "string".
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931458
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

А теперь давай вместе подумаем, что бы это могло значить.
откуда взялся byte[] и в каком месте он пытается преобразоваться в строку
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931757
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам JSON-файл это как текстовый документ. Там содержится массив в верхнем уровне данных.

В классе FileStream первый аргумент имеет тип String, где задается путь к файлу. Возвращает файл.

Byte[] образуется в Properties.Resources.jsonfile2 . И если преобразовывать в строку, то получается что то не логичное.

Если где то ошибаюсь, то, пожалуйста, поправьте меня.
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931776
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ранее вы использовали FileStream, в качестве параметра вы передавали имя файла и тип доступа.
Но ресурсы это не файлы. Когда вы обращаетесь к ресурсу напрямую через свойство, вам возвращается массив байт этого ресурса.
То есть вы получаете массив байт с содержимым вашего Json файла.
Далее есть несколько путей:
А) создать MemoryStream, в качестве аргумента он будет принимать массив (буфер), так как оба класса наследуют класс Stream, всё будет работать точно так же, как раньше.
То есть заменить строку с FireStream на
Код: c#
1.
2.
using (Stream file = new MemoryStream(Properties.Resources.jsonfile2))
{}


Б) Воспользоваться методом Properties.Resources.ResourceManager.GetStream(nameof(Resources.ResourceName)); Тогда вы получите непосредственно Stream для данного ресурса
Код: c#
1.
2.
using (Stream file = Properties.Resources.ResourceManager.GetStream(nameof(Resources.jsonfile2)))
{}


В) использовать Embedded ресурсы, там сразу возвращается Stream и как по мне, они на много удобнее, чем ресурсы из Properties
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931827
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
Далее есть несколько путей:
А) создать MemoryStream, в качестве аргумента он будет принимать массив (буфер), так как оба класса наследуют класс Stream, всё будет работать точно так же, как раньше.
То есть заменить строку с FireStream на
Код: c#
1.
2.
using (Stream file = new MemoryStream(Properties.Resources.jsonfile2))
{}

Этот вариант работает.
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931839
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Б) Воспользоваться методом Properties.Resources.ResourceManager.GetStream(nameof(Resources.ResourceName)); Тогда вы получите непосредственно Stream для данного ресурса
Код: c#
1.
2.
using (Stream file = Properties.Resources.ResourceManager.GetStream(nameof(Resources.jsonfile2)))
{}

Этот вариант не работает.

Во время запуска на этой строке пишет:
System.InvalidOperationException
Сообщение = Данный ресурс не объект класса Stream - вместо него вызовите GetObject. Имя ресурса: "jsonfile2"
Источник = mscorlib


Написал так
Код: c#
1.
using (Stream file = Properties.Resources.ResourceManager.GetObject(nameof(Resources.jsonfile2)))


Потом Visual Studio предлагает так написать
Код: c#
1.
using (Stream file = Resources.ResourceManager.GetObject(nameof(Resources.jsonfile2)))

После этого пишет:
Ошибка CS0266 Не удается неявно преобразовать тип "object" в "System.IO.Stream". Существует явное преобразование (возможно, пропущено приведение типов).

Пишу так:
Код: c#
1.
using (Stream file = (Stream)Resources.ResourceManager.GetObject(nameof(Resources.jsonfile2)))

Visual Studio пишет:
System.InvalidCastException
HResult=0x80004002
Сообщение = Не удалось привести тип объекта "System.Byte[]" к типу "System.IO.Stream"


Похоже не в ту сторону корректирую.
...
Рейтинг: 0 / 0
Вопрос про JSON
    #39931858
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Сообщение = Не удалось привести тип объекта "System.Byte[]" к типу "System.IO.Stream"
Да блин, ну нельзя же тыкать пальцем в небо без понимания того, что делаешь.
Как преобразовать массив байт в поток тебе выше написал Роман и даже пример привел.

Как ты хочешь сделать прямое приведение byte[] в Stream, ты хотя бы первые несколько глав учебника прочти.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос про JSON
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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