powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / сложный JSON
22 сообщений из 22, страница 1 из 1
сложный JSON
    #38787612
RAVen42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУ Причем тут EF и хранимая процедура?
Надеялся что всю работу по построению JSON возьмет на себя APIController.
Я совсем недавно познакомился с ASP.NET так что очень много незнакомого и непонятного.

Спасибо за совет!
...
Рейтинг: 0 / 0
сложный JSON
    #38787627
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

какое сообщение было первым? :)
...
Рейтинг: 0 / 0
сложный JSON
    #38787630
RAVen42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем дня!

Продолжаю разбираться с EF и WEB API.
Есть процедура на SQL сервере возвращает следующий набор данных

ID|name|hobbies1|hobbies2|hobbies3|address|
1 | Doe | reading | cinema | sports | ABC |

как вернуть вот такой JSON:

Код: xml
1.
2.
3.
4.
5.
6.
7.
{"ID":1,
"name":"Doe",
"hobbies":
   ["reading",
    "cinema",
    "sports"  ],
"address":"ABC"}



И вообще возможно так сделать из одного набора данных?
...
Рейтинг: 0 / 0
сложный JSON
    #38787632
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай себе класс и оборачивай его json. Либо можно анонимным типом обойтись.

Код: c#
1.
2.
3.
4.
5.
6.
7.
public class RootObject
{
    public int ID { get; set; }
    public string name { get; set; }
    public string address { get; set; }
    public IEnumerable<string> hobbies { get; set; }
}



Причем тут EF и хранимая процедура?
...
Рейтинг: 0 / 0
сложный JSON
    #38787638
RAVen42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
monstrU , 16760595
МСУ , например берем класс RootObject из Вашего примера.
У меня есть 2 процедуры на сервере:
1) возвращает: ID, name, address
2) возвращает: ID, hobbies

Как сделать JOIN данных из этих 2-х процедур по ID, чтобы записать данные в класс RootObject
Или это вообще по другому делается?

Если не сложно можно простой пример?
...
Рейтинг: 0 / 0
сложный JSON
    #38787640
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAVen42 monstrU , 16760595
МСУ , например берем класс RootObject из Вашего примера.
У меня есть 2 процедуры на сервере:
1) возвращает: ID, name, address
2) возвращает: ID, hobbies

Как сделать JOIN данных из этих 2-х процедур по ID, чтобы записать данные в класс RootObject
Или это вообще по другому делается?

Если не сложно можно простой пример?Простой пример - это сначала заполнить спискок List<RootObject> данными из первой процедуры, а потом в цикле, или при первом обращении к свойству hobbies (Lazy), заполнить последнее данными из второй процедуры.

Также RootObject может реализовывать так называемый шаблон Proxy, и при обращении к свойству hobbies, всегда дёргать хранимую процедуру.

Но всё это не имеет никакого отношения к JSON и Web API.
Конвертацию модели в JSON в Web API выполняет соответсвующий formatter, которму абсолютно по фигу, каким образом была заполнена модель, которую необходимо преобразовать в JSON.
...
Рейтинг: 0 / 0
сложный JSON
    #38787641
RAVen42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, да я понимаю (уже) что всё это не имеет никакого отношения к JSON и Web API.
рассматриваемая мной ситуация происходит в контексте WEB API и JSON. и я понимаю что formatter'у абсолютно пофиг.
...
Рейтинг: 0 / 0
сложный JSON
    #38787646
RAVen42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПростой пример - это сначала заполнить спискок List<RootObject> данными из первой процедуры, а потом в цикле, или при первом обращении к свойству hobbies (Lazy), заполнить последнее данными из второй процедуры.

Как то это не красиво и долго.
А если первая процедура вернет 10000 записей? эт чтож дергать 10000 раз 2-ую процедуру?
Циклы тоже как то не очень красиво.

Неужели нельзя сделать:
1) Выполнить процедуру №1
1) Выполнить процедуру №2

а потом что то вроде такого (очень сильно утрирую):
Код: c#
1.
 RootObject rootobject =  proc1.id join proc2.id


таким образом заполним rootobject данными из двух процедур
а дальше
Код: c#
1.
 return ...

и formatter rootobject красиво преобразует в JSON

я вот про что спрашиваю.
...
Рейтинг: 0 / 0
сложный JSON
    #38787649
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAVen42, EF лишь формирует запрос на языке T-SQL за Вас и отправляет серверу на выполнение.
Напишите-ка то, что хотите в виде одного запроса (в виде одной хранимой процедуры).

По какому полю Вы собрались JOIN-ить результаты хранимых процедур?
...
Рейтинг: 0 / 0
сложный JSON
    #38787650
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем вообще использовать хранимые процедуры? Нельзя-ли написать запрос, или представление (VIEW)?
...
Рейтинг: 0 / 0
сложный JSON
    #38787652
RAVen42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПо какому полю Вы собрались JOIN-ить результаты хранимых процедур?
по полю ID
Могу написать и в виде одной процедуры, например в поле hobbies , будет строка с перечислением "reading,cinema,sports "

skyANAЗачем вообще использовать хранимые процедуры? Нельзя-ли написать запрос, или представление (VIEW)?
1) Преследую цель по максимуму логику сделать на сервере, чтоб не переделывать фронт-енд.
2) НА T-SQL значительно проще и удобней написать и поддерживать МЕГА запрос, нежели писать его в коде.
3) View не вариант, слишком много ограничений для моего случая( временные таблицы, функции и т.д....)

Весь вопрос как легко и красиво сделать из данных возвращаемых процедурой JSON сложной структуры.
...
Рейтинг: 0 / 0
сложный JSON
    #38787660
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAVen42авторПо какому полю Вы собрались JOIN-ить результаты хранимых процедур?
по полю ID
Могу написать и в виде одной процедуры, например в поле hobbies , будет строка с перечислением "reading,cinema,sports "

skyANAЗачем вообще использовать хранимые процедуры? Нельзя-ли написать запрос, или представление (VIEW)?
1) Преследую цель по максимуму логику сделать на сервере, чтоб не переделывать фронт-енд.
2) НА T-SQL значительно проще и удобней написать и поддерживать МЕГА запрос, нежели писать его в коде.
3) View не вариант, слишком много ограничений для моего случая( временные таблицы, функции и т.д....)

Весь вопрос как легко и красиво сделать из данных возвращаемых процедурой JSON сложной структуры.Легко и красиво - это сформировать запрос с нужными JOIN-ами, выполнить его, а результат замапить в набор объектов, что formatter превратит в JSON.
Собственно, что и делает ORM.

Но в Вашем случае почему-то запрос составить нельзя. А в ORM нет чудесных механизмов для объединения двух хранимок в одну в одном запросе.

Пишите ещё одну хранимую процедуру, что будет вызывать первые две, объединять (JOIN) результаты по полю ID, и возвращать.
И используйте её: Data read using Stored Procedure .
...
Рейтинг: 0 / 0
сложный JSON
    #38787662
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: а от использования МЕГА запросов, временных таблиц и функции при выборке данных можно и избавиться.
...
Рейтинг: 0 / 0
сложный JSON
    #38787786
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если первая процедура вернет 10000 записей? эт чтож дергать 10000 раз 2-ую процедуру?
А еще некоторые используют пейджинг...:)
...
Рейтинг: 0 / 0
сложный JSON
    #38787821
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalabongaА если первая процедура вернет 10000 записей? эт чтож дергать 10000 раз 2-ую процедуру?
А еще некоторые используют пейджинг...:)В контексте Web API, для выборки 10000 записей из базы, зачем он нужен?
Ну хочет потребитель получить все 10000 записей от вашего API, флаг ему вруки. Захочет ограничить выборку, сформирует другой запрос в формате OData.
...
Рейтинг: 0 / 0
сложный JSON
    #38788152
RAVen42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA Легко и красиво - это сформировать запрос с нужными JOIN-ами, выполнить его, а результат замапить в набор объектов, что formatter превратит в JSON.
Собственно, что и делает ORM.

Но в Вашем случае почему-то запрос составить нельзя. А в ORM нет чудесных механизмов для объединения двух хранимок в одну в одном запросе.

Пишите ещё одну хранимую процедуру, что будет вызывать первые две, объединять (JOIN) результаты по полю ID, и возвращать.
И используйте её:

Да дело вовсе не в одной или двух процедурах и не в количестве возвращаемых данных.
процедуру использую ТОЛЬКО из соображений:
1) Преследую цель по максимуму логику сделать на сервере, чтоб не переделывать фронт-енд.
2) НА T-SQL значительно проще и удобней написать и поддерживать МЕГА запрос, нежели писать его в коде.
3) View не вариант, слишком много ограничений для моего случая( временные таблицы, функции и т.д....)


skyANA P.S.: а от использования МЕГА запросов, временных таблиц и функции при выборке данных можно и избавиться.
Да можно но это очень неудобно.
Но когда при выборке используется куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами и т.д.
Как Вы себе представляете писать этот запрос, состоящий из 1000+ строк в коде?
Зачем в коде разводить бардак? Когда можно просто очень коротко и ясно написать
Код: c#
1.
exec ProcedureBlaBlaBLa Param1,Param2



Допустим вернула у меня процедура такие данные:

ID|name| hobbies |address |
1 | Doe | reading,cinema,sports | ABC |

Что мне написать в коде чтоб результатом был JSON


{"ID":1,
"name":"Doe",
"hobbies":
["reading",
"cinema",
"sports" ],
"address":"ABC"}
...
Рейтинг: 0 / 0
сложный JSON
    #38788183
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAVen42когда при выборке используется куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами и т.д.
Как Вы себе представляете писать этот запрос, состоящий из 1000+ строк в коде?Очень просто: вызвать всю эту "куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами" при добавлении данных,
а при выборке тупо вернуть готовый результат запросом вида: SELECT Column1, Column2, ..., ColumnN FROM Table.

Интересно, сколько по времени у Вас выполняется такая хранимая процедура? Что будет при нагрузке скажем в 20 запросов в секунду?
...
Рейтинг: 0 / 0
сложный JSON
    #38788199
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAVen42Допустим вернула у меня процедура такие данные:

ID|name| hobbies |address |
1 | Doe | reading,cinema,sports | ABC |

Что мне написать в коде чтоб результатом был JSON


{"ID":1,
"name":"Doe",
"hobbies":
["reading",
"cinema",
"sports" ],
"address":"ABC"}
Хм, что-то вроде этого:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
using DomainModel;

public class PersonsController : ApiController
{
    // GET api/persons
    public IEnumerable<Person> Get()
    {
        return personRepository.FindAll();
    }
}


При этом в классе Startup прописать:
Код: c#
1.
2.
3.
4.
5.
var jsonFormatter = System.Web.Http.GlobalConfiguration.Configuration.Formatters.JsonFormatter;
var jsonFormatterSettings = jsonFormatter.SerializerSettings;

jsonFormatterSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatterSettings.Formatting = Formatting.Indented;
...
Рейтинг: 0 / 0
сложный JSON
    #38788479
RAVen42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,
т.е. благодаря именно этому
Код: c#
1.
2.
3.
4.
5.
var jsonFormatter = System.Web.Http.GlobalConfiguration.Configuration.Formatters.JsonFormatter;
var jsonFormatterSettings = jsonFormatter.SerializerSettings;

jsonFormatterSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatterSettings.Formatting = Formatting.Indented



у меня получится JSON сложной структуры?

авторОчень просто: вызвать всю эту "куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами" при добавлении данных,
а при выборке тупо вернуть готовый результат запросом вида: SELECT Column1, Column2, ..., ColumnN FROM Table.

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

Интересно, сколько по времени у Вас выполняется такая хранимая процедура? Что будет при нагрузке скажем в 20 запросов в секунду?
При правильном написании, и достаточных мощностях сервера, такая процедура выполняется за доли секунд.
К тому-же процедуры имеют планы и статистики, которые значительно ускоряют её работу.
Но это уже совсем другая история :)
...
Рейтинг: 0 / 0
сложный JSON
    #38788504
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAVen42skyANA,
т.е. благодаря именно этому
Код: c#
1.
2.
3.
4.
5.
var jsonFormatter = System.Web.Http.GlobalConfiguration.Configuration.Formatters.JsonFormatter;
var jsonFormatterSettings = jsonFormatter.SerializerSettings;

jsonFormatterSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatterSettings.Formatting = Formatting.Indented



у меня получится JSON сложной структуры?Нет. Разве из кода не понятно, что происходит?

RAVen42авторОчень просто: вызвать всю эту "куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами" при добавлении данных,
а при выборке тупо вернуть готовый результат запросом вида: SELECT Column1, Column2, ..., ColumnN FROM Table.

skyANA, понимаете эта вся куча функций ... это один единый запрос, где таблицы связаны между собой юнионами, джоинами, потом транспонированы, и другие преобразования я вот ни как не могу понять зачем этот много-строчный запрос пихать в код программы?
Когда можно обойтись простым Exec в одну строчку.А я и не предлагаю "много-строчный запрос пихать в код программы", читайте внимательно.

RAVen42Интересно, сколько по времени у Вас выполняется такая хранимая процедура? Что будет при нагрузке скажем в 20 запросов в секунду?
При правильном написании, и достаточных мощностях сервера, такая процедура выполняется за доли секунд.
К тому-же процедуры имеют планы и статистики, которые значительно ускоряют её работу.
Но это уже совсем другая история :)То есть конкретных показателей у Вас нет, только предположения. Не очень хорошо.

Планы и статистики-то имеются, но также имеется и такая штука как parameter sniffing, когда планы и статистики летят в трубу.
...
Рейтинг: 0 / 0
сложный JSON
    #38788808
RAVen42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,
авторНет. Разве из кода не понятно, что происходит?
Если честно, то не совсем понятно.

авторА я и не предлагаю "много-строчный запрос пихать в код программы", читайте внимательно.
т.е. типа витрины данных сделать, да можно и так.

авторТо есть конкретных показателей у Вас нет, только предположения. Не очень хорошо.
пока что нет, так-как я только разбираюсь с самим процессом.

авторПланы и статистики-то имеются, но также имеется и такая штука как parameter sniffing, когда планы и статистики летят в трубу.
SQL я знаю очень хорошо
...
Рейтинг: 0 / 0
сложный JSON
    #38788858
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RAVen42skyANA,
авторНет. Разве из кода не понятно, что происходит?
Если честно, то не совсем понятно.JsonFormatter сам преобразует IEnumerable<Person> в JSON.
Я лишь сказал ему: "Писать имена свойств с маленькой буквы и использовать отступы".

RAVen42авторА я и не предлагаю "много-строчный запрос пихать в код программы", читайте внимательно.
т.е. типа витрины данных сделать, да можно и так.Нет, просто шаблон "Денормализация" использовать.

RAVen42авторТо есть конкретных показателей у Вас нет, только предположения. Не очень хорошо.
пока что нет, так-как я только разбираюсь с самим процессом.

авторПланы и статистики-то имеются, но также имеется и такая штука как parameter sniffing, когда планы и статистики летят в трубу.
SQL я знаю очень хорошо Странно, с одной стороны SQL знаете хорошо, с другой стороны конкретных показателей у Вас нет.
Ну да ладно, если знаете хорошо, то разберётесь в производительности.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / сложный JSON
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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