У меня есть группа объектов домена, которые я сериализую, отправляю в другие приложения и затем десериализую с помощью Json.Net
. Эти объекты могут иметь свойства, которыеOmit type для динамического свойства без изменения класса?
- Определяется как абстрактный базовый класс с несколькими производными классами
- Динамические свойства
Я использовал TypeNameHandling.Auto
, который добавляет $type
свойство типов, которые отличаются друг от объявленный тип. Однако этот параметр имеет нежелательный побочный эффект на мои динамические свойства, а именно, что типы их также объявляются.
В приведенном ниже примере model
является динамическим свойством, определяемым как public dynamic Model { get; set; }
в моем коде на C#.
"model":{"$type":"<>f__AnonymousType0`3[[System.String, mscorlib],[System.String, mscorlib],[System.String, mscorlib]], ExampleAssembly","link":"http://www.google.com","name":"John"}
При попытке десериализации этой строки в другой сборке, Json.Net не может (конечно) найти ExampleAssembly
. Использование TypeNameHandling.None
свойства дает следующей Сериализации имущества
"model": {"link":"http://www.google.com","name":"John"}
который может быть успешно десериализованная к dynamic
. Однако это разрушает десериализацию производных типов.
Любые идеи о том, как заставить это работать без реализации пользовательских IContractResolver
и, возможно, другого настраиваемого кода?
Я не являюсь владельцем объектов домена, поэтому я не могу их украсить или их свойства с помощью атрибутов или позволить им реализовать интерфейсы и т. Д. То, что я ищу, - это какая-то настройка в сериализаторе, который опускает типы для dynamics
.
IMHO это должно быть настроено через настройки, так или иначе, я просто не нашел его.
[JsonIgnore] или условного сериализации (http://www.newtonsoft.com /json/help/html/conditionalproperties.htm) может быть полезно – Nair
@Nair: Спасибо, но, к сожалению, нет.Я не владею объектом домена и не могу затем украсить атрибутами или методами. Кроме того, это не очень хорошо масштабируется, поскольку я должен это для ВСЕХ объектов. – pardahlman
Добавление '[JsonProperty (TypeNameHandling = TypeNameHandling.None)]' к соответствующему свойству было бы самым простым способом, но в вашем комментарии вы говорите, что не можете этого сделать. Возможно, вы захотите [изменить] вопрос, чтобы уточнить это требование. – dbc