Когда using Newtonsoft.Json
, я могу заставить его делать то, что мне нужно, добавив конвертер на верхний уровень SerializerSettings
или поставив его в вызов преобразования - все работает хорошо.
Я надеюсь извлечь некоторые из моих глобальных конвертеров, которые вместо этого будут декларативно применяться в соответствующем месте, где конвертация действительно требуется.
Мне известны следующие техники: -
- тип уровня
[JsonConverter(typeof(Converters.StringEnumConverter))]
непосредственно на тип X
- уровень участника
[JsonConverter(typeof(Converters.StringEnumConverter))]
если член имеет тип X
- уровень предмета
[JsonProperty(ItemConverterType=typeof(Converters.StringEnumConverter)]
, если элемент на самом деле является массивом и т. Д. X
Проблема, с которой я сталкиваюсь, заключается в том, что некоторые глобальные конвертеры, которые я использую, работают с вложенными типами, например, если у меня есть член типа Tuple<X[],Nullable<X>>
, я не могу выразить ", если вы встречаете X при обработке этого поля или любого его потомка, выполните преобразование" семантическое и вместо этого получите Newtonsoft.Json.JsonSerializationException
.
Существует ли такой "для этого дерева, также используйте этот конвертер, пожалуйста" механизм существует? Я бы хотел избежать определения типа верхнего уровня для всего, что я когда-либо захочу преобразовать, а затем пометить этот тип с помощью JsonConverter
, чтобы обойти это?