我希望以下的
我使用了以下代码来覆盖默认转换器(即
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"
JToken
作为你需要的 C# 对象呢?除非我没有完全理解你的问题,否则似乎你正在让自己变得困难。 - JabberwockyAuthor
的对象。如果您知道传入的json是Author
类型,请在每个变量的顶部添加[JsonProperty("blabla")]
并将其解析为JToken
,C#将完成其余工作。再次,如果我误解了重点,请告诉我。 - Jabberwocky[JsonProperty("blabal")]
。比如说,ID
和SourceID
都将有[JsonProperty("id")]
,请参考Json示例。 - Dr. Strangelove