У меня есть код C# с использованием ASP.Net MVC, который использует Json.Net для сериализации некоторых DTO. Чтобы уменьшить полезную нагрузку, я использовал атрибут [JsonProperty (PropertyName = "shortName")] для использования более коротких имен свойств во время сериализации.Как игнорировать JsonProperty (PropertyName = "someName") при сериализации json?
Это отлично работает, когда клиент является другим .Net-приложением или сервисом, поскольку десериализация ставит иерархию объектов обратно, используя более удобные имена, сохраняя при этом фактическую полезную нагрузку передачи.
Проблема возникает, когда клиент является javascript/ajax через браузер. Он делает запрос и получает json ... но этот json использует сокращенные менее дружественные имена.
Как я могу заставить механизм сериализации json.net игнорировать атрибут [JsonProperty (PropertyName = "shortName")] программно? В идеале мой MVC-сервис будет сидеть там и обычно сериализоваться с использованием сокращенных имен свойств. Когда мой код обнаруживает определенный параметр, я хотел бы получить сериализацию данных с использованием более длинных имен и игнорировать атрибут [JsonProperty()].
Любые предложения?
Спасибо,
Kevin
просто удалить 'JsonProperty' и возвращает анонимный объект по к параметру, который вы передали. что-то вроде 'new {UserName = uname}' –
Я думаю, что лучшим подходом было бы сделать собственный сериализатор (с json.NET, а не с нуля) и удалить аннотации. Сделайте короткие имена и длинные имена параметром сериализатора и просто скажите, что вы хотите во время сериализации. json.NET не поддерживает использование/игнорирование аннотаций во время выполнения. Если они есть во время компиляции, они будут использоваться (запрет некоторых серьезных хакеров). – evanmcdonnal
Я ценю комментарии там. @evanmcdonnal: если бы мы пошли с помощью специального сериализатора, нам нужно было бы это сделать на определенном DTO уровне (прикрепленном к каждому DTO?). У нас есть много DTO, распространяемых по многим решениям через наши многочисленные команды разработчиков. В идеале мы могли бы найти относительно элегантный способ подключения к процессу сериализации без необходимости касаться и поддерживать это через все DTO по всей доске. – Kevin