我有一个课程,我试图通过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属性修饰的非参数构造函数。
我使用的属性是错误的吗?
答案 0 :(得分:0)
我的不好:问题在于,由于TypeNameHandlling生效,而JobStatus是父类,因此每个子类(JobStatus - &gt; BatchJobStatus - &gt; AgencyJobStatus [未显示])也必须具有Json的无参数构造函数。 NET使用。