0 / 0 / 3
Регистрация: 21.06.2013
Сообщений: 71
1

Null в JSON и как с ним подружиться

23.01.2021, 04:59. Показов 1644. Ответов 2

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток. Подскажите как быть. Решил написать библиотеку для работы с Json (тут может быть все что угодно) и получил пинок от Null при передати структуры в метод.

Код основной программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using JSonWork;
using JSonWork.Model;
 
namespace JsonSample
{
    class Program
    {
        private static void Main(string[] args)
        {
            BinaryFileModel model = new BinaryFileModel(@"E:\C#\JsonSample\JsonSample\bin\Debug\netcoreapp3.1\", "test.json", "test");
 
            MainWork jWork = new MainWork();
 
            jWork.SaveToJson<BinaryFileModel>(@"E:\C#\JsonSample\JsonSample\bin\Debug\netcoreapp3.1\test.json", model);
        }
    }
}
Код библиотеки:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using JSonWork.Interface;
using Newtonsoft.Json;
using System.IO;
 
namespace JSonWork
{
    public class MainWork : IJWork
    {
        public T ConvertFromJson<T>(string jsonData) where T : struct => JsonConvert.DeserializeObject<T>(jsonData);
 
        public string ConvertToJson<T>(T? model) where T : struct => JsonConvert.SerializeObject(model);
 
        public void SaveToJson<T>(string path, T? model) where T : struct
        {
            string jData = ConvertToJson(model);
 
            File.WriteAllText(path, jData);
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
namespace JSonWork.Interface
{
    public interface IJWork
    {
        string ConvertToJson<T>(T? model) where T : struct;
        T ConvertFromJson<T>(string jsonData) where T : struct;
 
        void SaveToJson<T>(string path, T? model) where T : struct;
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace JSonWork.Model
{
    public class BinaryFileModel
    {
        private string filePath = "";
        private string fileName = "";
        private string fileContent = "";
 
        public string getFilePath { get => filePath; }
        public string getFileName { get => fileName; }
        public string getFileContent { get => fileContent; }
 
        public BinaryFileModel(string filePath, string fileName, string fileContent)
        {
            this.filePath = filePath;
            this.fileName = fileName;
            this.fileContent = fileContent;
        }
    }
}
А вот собственно место где ошибка и сама ошибка:
C#
1
jWork.SaveToJson<BinaryFileModel>(@"E:\C#\JsonSample\JsonSample\bin\Debug\netcoreapp3.1\test.json", model);
Код
Ошибка	CS0453	Для использования в качестве параметра "T" в универсальном типе или методе "MainWork.SaveToJson<T>(string, T?)" тип "BinaryFileModel" должен быть типом значения, не допускающим значения Null.
Подскажите что деть пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2021, 04:59
Ответы с готовыми решениями:

Null reference при десерелизации JSON (Newtonsoft.Json)
Задача: достать из JSON ответа Название фирмы. Использую библиотеку Newtonsoft.Json. Сам код:...

Передача массива JSON + AJAX , видит массив как NULL
Задача не сложная, получить телефоны из формы, преобразовать в массив, и отправить как массив...

Как подружиться с session_start()
Есть модуль фотогалереи, требуется сделать его под себя, а именно поменять интерфейсную часть....

Как подружиться с STM32
Добрый день! Я хочу научиться работать/писать код для STM32 Динный момент имею Dyscovery board с...

2
Модератор
Эксперт .NET
15462 / 10707 / 2786
Регистрация: 21.04.2018
Сообщений: 31,521
Записей в блоге: 2
23.01.2021, 06:58 2
Лучший ответ Сообщение было отмечено Clich как решение

Решение

Цитата Сообщение от Clich Посмотреть сообщение
Подскажите что деть пожалуйста.
См.:
C#
13
public void SaveToJson<T>(string path, T? model) where T : struct
Вы же сами задали, что T у вас может быть только структурой.
А хотите использовать метод для класса:
C#
3
    public class BinaryFileModel
Или измените ограничение на тип:
C#
1
2
3
4
5
6
7
8
9
10
namespace JSonWork.Interface
{
    public interface IJWork
    {
        string ConvertToJson<T>(T model) where T : class;
        T ConvertFromJson<T>(string jsonData) where T : class;
 
        void SaveToJson<T>(string path, T model) where T : class;
    }
}
Или используйте вместо класса структуру:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace JSonWork.Model
{
    public struct BinaryFileModel
    {
        private string filePath = "";
        private string fileName = "";
        private string fileContent = "";
 
        public string getFilePath { get => filePath; }
        public string getFileName { get => fileName; }
        public string getFileContent { get => fileContent; }
 
        public BinaryFileModel(string filePath, string fileName, string fileContent)
        {
            this.filePath = filePath;
            this.fileName = fileName;
            this.fileContent = fileContent;
        }
    }
}
1
0 / 0 / 3
Регистрация: 21.06.2013
Сообщений: 71
23.01.2021, 08:01  [ТС] 3
Спасибо, если бы не Вы, то наверное не обратил бы внимание на собственный косяк )
0
23.01.2021, 08:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2021, 08:01
Помогаю со студенческими работами здесь

Как же подружиться с этими хитрыми массивами?
Погружаясь глубже и глубже в дебри памяти, указателей и массивов строк, почемуто просветление не...

Json выдаёт NULL
Здравствуйте, разбираюсь с json. Ошибка очень глупая, но не получается сделать правильно. ...

Обязательные may be null поля в json схеме
Всем привет. Использую следующий код для генерации json схемы из класса. ObjectMapper...

Получаю null при чтении из JSON
пишу такой код, выходит ошибка что proba=null; var get = new HttpRequest(); string...

JSON и все, что с ним связано
Ребят, я первый курс, ситуация такая: наш препод предложил 5 за семестр за 1 доп задачу. Вот...

Чтение файла с данными JSON дает null
Всем привет, имеется файл с данными объекта в формате JSON, полученный в результате успешной...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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