Здравствуйте, SergASh, Вы писали:
SAS>Привет всем!
SAS>Есть класс, который оборачивается в JsonResult и отправляется на клиента. Проблема в том, что класс ветвистый, там много IList'ов, в которых ещё более ветвистые классы со своими IList'ами и так далее. Имена полей занимают места чуть ли не больше, чем полезные данные. Хотелось бы минизировать эти накладные расходы. Переименовывать поля класса не хочется, а то потом трудно будет понять что к чему. Но в JavaScript'е я вполне могу смириться с сокращениями. А вопрос такой: можно ли настроить JsonResult чтобы он переименовывал поля при сериализации? Наверное должен быть какой-то атрибут для этого
.
SAS>Спасибо.
Насчёт кастомизации самого Json-а я не уверен, но могу предложить следующее решние c анонимными классами:
var data = new
{
L1 = obj.List1, // копируем IList
CO = new // вложенный ветвистый объект
{
p1 = obj.ComplexObject.Property1, // какие-то его свойства
els = from el1 in obj.ComplexObject.Elements1 select new { id = el1.Id, name = el1.Name }, // и списки
names = from el2 in obj.ComplexObject.Elements2 select el2.Name // даже список имён объектов из списка Elements2
}
};
return Json(data);
Это очень удобно, когда клиенту ещё и нужны не все поля класса (например из списка Elements2 нужны только имена, чтобы просто отобразить их на страничке).
В зависимости от количества вложенных объектов вполне может прокатить. Хотя я не уверен, что можно в принципе сделать это как-то более компактно. Разве что получить Json в виде строки и заменить в ней имена свойств с помощью каких-нибудь регулярных выражений.