我有一个类,我试图通过 Json.NET 反序列化:
public class JobStatus
{
[JsonConstructor]
protected JobStatus()
{
}
protected internal JobStatus( AzureBlobFile blobFile )
{
if( blobFile == null )
throw new ArgumentNullException(nameof( blobFile ));
}
}
反序列化按如下方式触发:
JsonSerializerSettings jsonSettings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.All,
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};
List<AzureBlobFile> blobFiles = blobFolder.GetBlobFiles();
if( blobFiles == null ) return null;
string text = blobFiles.First().DownloadText();
JobStatus junk = JsonConvert.DeserializeObject<JobStatus>( text, jsonSettings );
对 DeserializeObject() 的调用总是失败,因为它调用参数化的构造函数,而不是用 JsonConstructor 属性修饰的非参数化构造函数。
我是否错误地使用了该属性?
我的错:问题是由于TypeNameHandlling是有效的,并且JobStatus是一个父类,每个子类(JobStatus -> BatchJobStatus -> AgencyJobStatus [未显示])也必须具有无参数构造函数以供 Json.NET 使用。