Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для rfl
14 / 10 / 7
Регистрация: 13.06.2020
Сообщений: 260
.NET 6

Как конвертировать объект EF(Entity Framework | CodeFirst) в JSON

30.05.2022, 11:16. Показов 1132. Ответов 9

Студворк — интернет-сервис помощи студентам
Я хочу сделать конвертацию моего объкта в JSON. Можно сделать так, типа берешь данные из бд и записываешь их в лист, а потом в JSON. Но есть ли другой способ, типа вариант без листа?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.05.2022, 11:16
Ответы с готовыми решениями:

Создать таблицу с помощью Entity Framework CodeFirst
Ребята, вопрос следующий: Как мне сделать таблицу с помощью EF CF с учетом того, что я не знаю заранее сколько столбцов у меня будет?...

Entity framework миграции БД при использовании CodeFirst
Объясните пожалуйста логику построения базы данных фреймворком entity при работе с modelfirst. Есть две модели запись журнала и...

Как, используя Entity Framework, создать объект с конструктором, в котором содержится другой объект?
Имеем следующие объекты: Пользователь (User) и Человек (Person), при этом нельзя создать пользователя, не указав кто он (кто из Person). А...

9
Эксперт .NET
 Аватар для Usaga
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,986
30.05.2022, 15:34
rfl, а что не так с листом? Выгребние данных из базы и сериализация их в json. - это разные операции. Зачем вы их слить в одну хотите?
0
 Аватар для rfl
14 / 10 / 7
Регистрация: 13.06.2020
Сообщений: 260
30.05.2022, 18:33  [ТС]
Usaga, Просто интересовался есть ли другой способ, а так сперва в лист а потом в json абсолютно нормальное решение?
0
Эксперт .NET
 Аватар для Usaga
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,986
31.05.2022, 04:53
rfl, да. Более того: другого решения у вас в принципе не будет. EF не умеет материализовывать сразу в JSON минуя проекцию в сущность\DTO. Не умеет и уметь не будет за ненадобностью.

Максимум, что вы можете сделать - завести метод-расширение, который сначала материализует данные (FirstOrDefault, ToList), а потом сериализует в JSON). Но я в этом смысла не вижу никакого.
1
1339 / 919 / 264
Регистрация: 08.08.2014
Сообщений: 2,763
31.05.2022, 07:48
Цитата Сообщение от rfl Посмотреть сообщение
Просто интересовался есть ли другой способ
Без EF есть:
1. Забирать данные через datareader и формировать JSON вручную.
2. Воспользоваться возможностями конкретной СУБД: https://docs.microsoft.com/en-... rver-ver15.

Для EF на эту тему есть таск на гитхабе, но вряд ли его будут реализовывать: https://github.com/dotnet/efcore/issues/23920

Цитата Сообщение от rfl Посмотреть сообщение
а так сперва в лист а потом в json абсолютно нормальное решение?
Более того, вполне нормальное решение сначала в список EF-сущностей, потом в список DTO, а потом уже список DTO в какой-то формат, который нужен внешнему клиенту.
1
Эксперт .NET
 Аватар для Usaga
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,986
31.05.2022, 08:21
Цитата Сообщение от kotelok Посмотреть сообщение
вполне нормальное решение сначала в список EF-сущностей, потом в список DTO
Вот нет. Это точно не нормально. Нормально - сразу в список DTO.
1
1339 / 919 / 264
Регистрация: 08.08.2014
Сообщений: 2,763
31.05.2022, 08:53
Цитата Сообщение от Usaga Посмотреть сообщение
Вот нет. Это точно не нормально. Нормально - сразу в список DTO.
Т.е. это приемлемый подход, когда слой сервисов (или даже контроллеров) имеет прямой доступ к написанию запросов и проецирует результаты напрямую в DTO?

У меня почему-то каждый раз формируется дополнительная прослойка между EF/raw-SQL и сервисами предметной области.

Т.е. если сервису нужны какие-то данные, то он не выполняет напрямую SQL к базе, не трогает EF-контекст, а делает что-то типа var someData = _otherDataService.GetSomeData(args); и далее уже проецирует результаты в какие-то DTO (или не проецирует, если ему данные для других целей нужны). А внутри датасервиса уже может использоваться и EF, и голый SQL (через Dapper или какой-то свой особый механизм считывания данных).
1
Эксперт .NET
 Аватар для Usaga
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,986
31.05.2022, 09:37
Цитата Сообщение от kotelok Посмотреть сообщение
Т.е. это приемлемый подход, когда слой сервисов (или даже контроллеров) имеет прямой доступ к написанию запросов и проецирует результаты напрямую в DTO?
Вообще, слой Data Layer уже должен орудовать бизнес-моделями и DTO'шками. "Сущности" EF'а вне этого уровня вообще не должны отсвечивать.

Т.е. классы, где запросы у вас заключены (репозитории, сервисы - what ever) сразу должны проекции выполнять в DTO и Read Model'и. И принимать на вход Write Model'и. Никаких сущностей в этом процессе быть не должно.

Цитата Сообщение от kotelok Посмотреть сообщение
var someData = _otherDataService.GetSomeData(args); и далее уже проецирует результаты в какие-то DTO (или не проецирует, если ему данные для других целей нужны). А внутри датасервиса уже может использоваться и EF, и голый SQL (через Dapper или какой-то свой особый механизм считывания данных).
Так ваш GetSomeData уже и должен возвращать данные в нужном виде. Т.е. проекцию. Эта проекция сама может подпасть под дальнейшее проекцирование, если там какие-то другие аспекты могут подмешиваться, не имеющие смысла на данном уровне (добавление URL'ов, там, или ещё что).
2
1339 / 919 / 264
Регистрация: 08.08.2014
Сообщений: 2,763
31.05.2022, 09:58
Цитата Сообщение от Usaga Посмотреть сообщение
Эта проекция сама может подпасть под дальнейшее проекцирование
Так об этом и речь ведь? Метод 'GetSomeData' проецирует данные в какие-то сущности (из сырого SQL, из EF, из файла на диске, из кэша в памяти). Возвращает в виде коллекции 'List<SomeData>'.

Далее уже эти данные:
1. Могут использоваться каким-то сервисом для реализации части бизнес-логики.
2. Могут проецироваться по каким-то правилам в DTO для отдачи дальше.

Не напрямую же из котроллера возвращать 'List<SomeData>', тем самым жёстко связывая контракт внешнего API с контрактом сервиса, который лежит на два слоя ниже.
1
Эксперт .NET
 Аватар для Usaga
14093 / 9310 / 1349
Регистрация: 21.01.2016
Сообщений: 34,986
31.05.2022, 12:42
Цитата Сообщение от kotelok Посмотреть сообщение
Так об этом и речь ведь? Метод 'GetSomeData' проецирует данные в какие-то сущности (из сырого SQL, из EF, из файла на диске, из кэша в памяти). Возвращает в виде коллекции 'List<SomeData>'.
Да. Но я более конкретный момент с проекцией имел в виду: мы выгружаем из базы не сущности, а потом их проецирует перед возвратом из метода, а сразу запрашиваем у EF'а проекцию, минуя неоптимальное и избыточное выгребание сущностей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2022, 12:42
Помогаю со студенческими работами здесь

Как сохранить в Entity FrameWork Объект с внутренними объектами
У меня есть сущность Survey внутри него есть несколько параметров и еще один сущность Threats: public class Survey { ...

Добавить новый объект в ObjectContext Entity Framework
Читаю Троелсена, он добавляет объект с помощью метода AddObject(), у меня такого нет вообще... Только Add, почему это так? private...

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

При заполнении навигационного свойства Entity Framework вставляет новый объект
Всем привет. Имеется класс, ссылающийся навигационным свойством на другой класс по Id Т.е. нечто вроде этого public class...

Создать объект с фото для загрузки его в бд с использованием Entity Framework Core
Здравствуйте, как создать объект с фото для загрузки его в бд с помощью Entity Framework Core? Какой тип должно иметь свойство содержащее...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru