我希望以下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
。
Executable example: https://dotnetfiddle.net/l0bgYO
该应用程序将从不同来源获得的不同JSON对象转换为通用C#类型。通常,数据来自一个源,因为我们定义了默认转换器(即BaseJsonConverter
),对于来自其他源的数据,我们每个都定义了不同的转换器。
我知道诸如this one之类的方法,实际上我正在部分使用类似的方法。在引用该文章时,我需要根据输入的来源使用不同的_propertyMappings
,因为在我的应用程序中,属性到属性的映射不是一对一的。例如,我有以下JSON对象:
{
"id":123
}
// and
{
"id":"456"
}
第一个JSON对象应反序列化为:
author.ID = 123
author.SourceID = null
并且第二个JSON对象应反序列化为:
author.ID = 0
author.SourceID = "456"
我认为您应该尝试对具有不同JsonSerializerSettings
集合的不同数据源使用不同的Converters实例。并从类中删除JsonConverter
属性。