Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413

Конвертация пустых значений из Json объекта в пустую строку

26.12.2016, 14:58. Показов 5898. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, форумчане!
Подскажите пожалуйста, при конвертации из json в <ClientCard> падает метод

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 [HttpPost]
        [Route("UpdateClientInfo")]
        public IHttpActionResult UpdateClientInfo([FromBody] dynamic jsonClientInfo)
        {//Дата не парсится на лету в ClientCard, приходится использовать dynamic
            ClientCard clientInfo = JsonConvert.DeserializeObject<ClientCard>(jsonClientInfo.ToString(), new IsoDateTimeConverter { DateTimeFormat = "dd.MM.yyyy" });
 
            var clientCard = this._dataDirectoryQueries.GetClientInfo(clientInfo.ClientGuid);
 
            if (clientInfo.ClientGuid == Guid.Empty || clientCard == null || clientCard.Count() == 0)
                return this.Ok(this._dataDirectoryQueries.InsertClientInfo(clientInfo));
            else
                return this.Ok(this._dataDirectoryQueries.UpdateClientInfo(clientInfo));
        }
Если приходит json, в котором не все поля заполнены этот метод падает, потому что JsonConvert пытается вместо пустых значений вставить null, как сделать так чтобы он вставлял не null, а string.Empty?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.12.2016, 14:58
Ответы с готовыми решениями:

Замена (удаление) нескольких пустых строк на одну пустую строку
Доброго времени суток форумчане! Возможно ли решить такую задачу? Пример файла txt: Однажды, в студёную зимнюю пору Я из лесу...

Поиск в БД: 'Не удается вставить пустую строку.Необходим хотя бы один столбец значений'
Помогите новичку!%) Не пойму, почему выдает сообщение: 'Не удается вставить пустую строку.Необходим хотя бы один столбец значений' на...

Ошибка: Не удаётся вставить пустую строку. Необходим хотя бы один столбец значений
Здравствуйте программисты! Помогите исправить ошибку. Требуется написать курсовую работу &quot;Тестирование в делфи&quot;. Форма с...

9
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
26.12.2016, 15:05
Alex_trader, воспользуйтесь классом JsonSerializerSettings и его свойствами NullValueHandling, DefaultValueHandling:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
 
JsonSerializerSettings settings = new JsonSerializerSettings
{
    DefaultValueHandling = DefaultValueHandling.Populate, // magic!
    NullValueHandling = NullValueHandling.Ignore
};
 
settings.Converters.Add(new IsoDateTimeConverter
{
    DateTimeFormat = "dd.MM.yyyy"
});
 
ClientCard clientInfo = JsonConvert.DeserializeObject<ClientCard>("<some_json_text>", settings);
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
26.12.2016, 22:14  [ТС]
bax_tang, для этого необходимо создать новый класс?

Добавлено через 6 минут
Для Этого нужно создать какой то новый класс с таким текстом
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
26.12.2016, 22:16
Alex_trader, что Вы подразумеваете под "создать новый класс"?
ClientCard как был, так и остался; JsonSerializerSettings - класс из Newtonsoft.Json.

Добавлено через 2 минуты
Дописать метод UpdateClientInfo - ведь именно там возникает исключение.
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.12.2016, 07:38  [ТС]
bax_tang, не работает
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
 [HttpPost]
        [Route("UpdateClientInfo")]
        public IHttpActionResult UpdateClientInfo([FromBody] dynamic jsonClientInfo)
        {
            JsonSerializerSettings settings = new JsonSerializerSettings
            {
                DefaultValueHandling = DefaultValueHandling.Populate, // magic!
                NullValueHandling = NullValueHandling.Ignore
            };
 
            settings.Converters.Add(new IsoDateTimeConverter
            {
                DateTimeFormat = "dd.MM.yyyy"
            });
 
            ClientCard clientInfo = JsonConvert.DeserializeObject<ClientCard>(jsonClientInfo.ToString(), settings);
 
            //ClientCard clientInfo = JsonConvert.DeserializeObject<ClientCard>(jsonClientInfo.ToString(), new IsoDateTimeConverter { DateTimeFormat = "dd.MM.yyyy" });
 
            var clientCard = this._dataDirectoryQueries.GetClientInfo(clientInfo.ClientGuid);
 
            if (clientInfo.ClientGuid == Guid.Empty || clientCard == null || clientCard.Count() == 0)
                return this.Ok(this._dataDirectoryQueries.InsertClientInfo(clientInfo));
            else
                return this.Ok(this._dataDirectoryQueries.UpdateClientInfo(clientInfo));
        }
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
27.12.2016, 08:02
Alex_trader, а как выглядит jsonClientInfo.ToString() ?
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.12.2016, 08:09  [ТС]
Падает {"Строка не распознана как действительное значение DateTime."}

Добавлено через 1 минуту
JSON
1
2
3
4
5
6
7
8
9
10
11
{
  "ClientGuid": "d5750149-8906-4af7-a892-2bda0bd205f7",
  "Address": "",
  "doc_Serial": "",
  "doc_Number": "",
  "doc_Issue": "",
  "doc_Date": "",
  "adv_InviteId": "",
  "IsMailAgree": "false",
  "IsSmsAgree": "false"
}
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
27.12.2016, 08:22
Лучший ответ Сообщение было отмечено Alex_trader как решение

Решение

Цитата Сообщение от Alex_trader Посмотреть сообщение
"doc_Date": ""
Действительно, с чего бы это вдруг? возможно, потому, что пустая строка для любого формата даты является невалидным значением?

Я бы сделал так:

C#
1
2
3
4
5
6
public class ClientCard
{
   public DateTime? doc_Date; // Nullable<DateTime>
 
   // другие поля
}
а через jsonClientInfo передавал вот так:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "ClientGuid": "d5750149-8906-4af7-a892-2bda0bd205f7",
  "Address": "",
  "doc_Serial": "",
  "doc_Number": "",
  "doc_Issue": "",
 
  // <<< null - допустимое значение для Nullable<DateTime>
  // а если тут будет строка, то она должна иметь формат dd.MM.yyyy
  "doc_Date": null,
 
  "adv_InviteId": "",
  "IsMailAgree": false, // булевые константы лучше представлять как именно булевые и именно константы,
  "IsSmsAgree": false // то есть без "стрингификации"
}
1
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
27.12.2016, 08:39  [ТС]
Цитата Сообщение от bax_tang Посмотреть сообщение
public DateTime? doc_Date; // Nullable<DateTime>
Да, так и сделал, спасибо работает

Добавлено через 1 минуту
Цитата Сообщение от bax_tang Посмотреть сообщение
булевые константы лучше представлять как именно булевые и именно константы
Значения этих полей собираются из формы в json, как это сделать?
0
.NET senior
 Аватар для bax_tang
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
27.12.2016, 08:44
Alex_trader, сейчас проверил - Newtonsoft.Json автоматически умеет парсить тип bool, так что с этим можете особо не заморачиваться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2016, 08:44
Помогаю со студенческими работами здесь

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

Java, JSON и JSON Simple. Непонятка с созданием объекта JSON на сервере для отправки на фронт
Здравствуйте. Разрабатываю интернет-магазин на Java. Мне нужно на фронте получить список товаров из базы данных для отображения на...

"Не удается вставить пустую строку. Необходим хотя бы один столбец значений" при вставке строки в грид
Добрый вечер. Вот, собственно, вылетает такая ошибка, когда вставляю новую строку в грид. У меня 2 грида на 2 формах, а на 3-ей добавляю...

Заменить каждую пустую строку файла на строку «Пустая строка»
Здравствуйте, помогите пожалуйста с данной задачей. Создать текстовый файл с произвольным содержимым. Написать программу, которая...

Макрос который создаст новую пустую строку через строку
Добрый день! Имеется excel файл, в оригинальном файле заполнено 50 тыс. строк x 60 столбцов (количество заполненных столбцов меняется,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru