JsonConstructor不被尊重

时间:2017-01-01 19:10:19

标签: c# json.net

我有一个课程,我试图通过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属性修饰的非参数构造函数。

我使用的属性是错误的吗?

1 个答案:

答案 0 :(得分:0)

我的不好:问题在于,由于TypeNameHandlling生效,而JobStatus是父类,因此每个子类(JobStatus - &gt; BatchJobStatus - &gt; AgencyJobStatus [未显示])也必须具有Json的无参数构造函数。 NET使用。