簡體   English   中英

無法使用 JIL Serializer ExcludeNulls 選項

[英]Not able to use JIL Serializer ExcludeNulls Option

我無法使用 JIL 的 Exclude Null 選項。 相反,我得到了一個例外:

JIL.DeserializationException: '預期數字'

下面是代碼片段。

public Task<InputFormatterResult> ReadAsync(InputFormatterContext context)
{
    if (context == null) throw new ArgumentNullException(nameof(context));

    var request = context.HttpContext.Request; if (request.ContentLength == 0)
    {
        if (context.ModelType.GetTypeInfo().IsValueType)
            return InputFormatterResult.SuccessAsync(Activator.CreateInstance(context.ModelType));
        else return InputFormatterResult.SuccessAsync(null);
    }

    var encoding = Encoding.UTF8;//do we need to get this from the request im not sure yet 

    using (var reader = new StreamReader(context.HttpContext.Request.Body))
    {
        var model =  Jil.JSON.Deserialize(reader, context.ModelType, Jil.Options.ExcludeNulls);
        return InputFormatterResult.SuccessAsync(model);
    }
}

1) 模型類型

public class PaymentTypeBORequest
{   
    public int pkId { get; set; }        
    public string description { get; set; }
    public bool isSystem { get; set; }
    public bool isActive { get; set; }           
}

2) JSON 字符串:

{
    "pkId":null,
    "description": "Adjustment",
    "isSystem": true,
    "isActive": true
}

excludeNulls選項描述是:

是否寫入值為null對象成員

(強調我的)

這表明它只影響序列化操作而不影響反序列化操作。

在將excludeNulls設置為true的對象序列化時,如果屬性為null值,Jil 將不會將屬性寫入 JSON。 在您的示例中,您正在反序列化為PaymentTypeBORequest對象,該對象本身不支持pkId屬性的null值,因為它不可為空。

為了解決您的特定問題,您可以簡單地將pkId設置為一個可為空的int ,如下所示:

public class PaymentTypeBORequest
{   
    public int? pkId { get; set; }
    ...
}

如果您還想為不可為 null 的isSystemisActive屬性允許null ,您可以對這些字段執行相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM