У меня есть пользовательский тип, полученный из типа DynamicObject
.Этот тип имеет фиксированные свойства, объявленные в типе.Таким образом, он позволяет пользователю предоставлять некоторые необходимые свойства в дополнение к любым динамическим свойствам, которые они хотят.Когда я использую метод JsonConvert.DeserializeObject<MyType>(json)
для десериализации данных для этого типа, он не устанавливает объявленные свойства, но эти свойства доступны через свойство индексатора объекта в динамическом объекте.Это говорит мне о том, что он просто обрабатывает объект как словарь и не пытается вызвать объявленные установщики свойств, а также не использует их для вывода информации о типе свойства.
Кто-нибудь сталкивался с такой ситуацией раньше?Любая идея, как я могу поручить классу JsonConvert
учитывать объявленные свойства при десериализации данных объекта?
Я пытался использовать пользовательский JsonConverter
, но для этого нужно написать сложное чтение JSONи методы письма.Я надеялся найти способ внедрить информацию о контракте свойства, переопределив JsonContractResolver
или JsonConverter
и т. Д.это делает для обычных типов.Но кажется, что он просто обрабатывает объект как обычный словарь.
Обратите внимание, что:
Я не могу удалить интерфейс IDictionary<string, object>
, поскольку некоторые изслучаи в моем API полагаются на объект, чтобы быть словарем, а не динамическим.
Добавление [JsonProperty]
ко всем объявленным свойствам для сериализации нецелесообразно, поскольку его производные типы создаются другими разработчиками и им не нужно явно заботиться о механизме сохранения.
Какие-либо предложения о том, как я могу заставить его работать правильно?