Мне бы хотелось, чтобы следующий тип Author
имел значение по умолчанию JsonConverter
и мог бы переопределить его во время выполнения.
[JsonConverter(typeof(BaseJsonConverter))]
public class Author
{
// The ID of an author entity in the application.
public int ID { set; get; }
// The ID of an Author entity in its source.
public string SourceID { set; set; }
}
Я использовал следующий код для переопределения конвертера по умолчанию (т. Е. BaseJsonConverter
).
public class AlternativeConverter : BaseJsonConverter
{ // the serializer implementation is removed for clarity. }
// Deserialize using AlternativeConverter:
var author = JsonConvert.DeserializeObject<Author>(jsonString, new AlternativeConverter());
Вопрос
Использование вышеуказанного вызова AlternativeConverter
сначала строится; однако затем экземпляр BaseJsonConverter
инициализируется и используется для десериализации. Таким образом, AlternativeConverter
никогда не используется.
Пример выполнения: https://dotnetfiddle.net/l0bgYO
Вариант использования
Приложение должно конвертировать различные JSON объекты, полученные из разных источников, в общий тип C#. Обычно данные поступают из источника, для которого мы определяем конвертер по умолчанию (т. Е. BaseJsonConverter
), а для данных, поступающих из других источников, мы определяем разные конвертеры для каждого.
Фон
Мне известны такие методы, как этот , и я действительно использую подобный метод частично. Что касается ссылки на эту статью, мне нужно иметь разные _propertyMappings
в зависимости от источника ввода, потому что в моем приложении атрибут сопоставления свойств не один-к-одному. Например, у меня есть следующие JSON объекты:
{
"id":123
}
// and
{
"id":"456"
}
, где первый JSON объект должен быть десериализован в:
author.ID = 123
author.SourceID = null
, а второй JSON объект должен быть десериализованным как:
author.ID = 0
author.SourceID = "456"