无法使用 JIL Serializer ExcludeNulls 选项
Not able to use JIL Serializer ExcludeNulls Option
我无法使用 JIL 的 Exclude Null 选项。相反,我得到一个例外:
JIL.DeserializationException: 'Expected digit'
下面是代码片段。
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
}
description for the excludeNulls
option是:
whether or not to write object members whose value is null
(强调我的)
这表明它只影响序列化操作而不影响反序列化操作。
当序列化一个excludeNulls
设置为true
的对象时,Jil不会将属性写入JSON,如果它们有null
值。在您的示例中,您将 反序列化 为 PaymentTypeBORequest
对象,该对象本身不支持 pkId
属性 的 null
值,因为它不可为空。
为了解决您的具体问题,您只需将 pkId
设置为可为 null 的 int
,如下所示:
public class PaymentTypeBORequest
{
public int? pkId { get; set; }
...
}
如果您还想对不可为 null 的 isSystem
和 isActive
属性允许 null
,您可以对这些字段执行相同的操作。
我无法使用 JIL 的 Exclude Null 选项。相反,我得到一个例外:
JIL.DeserializationException: 'Expected digit'
下面是代码片段。
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
}
description for the excludeNulls
option是:
whether or not to write object members whose value is
null
(强调我的)
这表明它只影响序列化操作而不影响反序列化操作。
当序列化一个excludeNulls
设置为true
的对象时,Jil不会将属性写入JSON,如果它们有null
值。在您的示例中,您将 反序列化 为 PaymentTypeBORequest
对象,该对象本身不支持 pkId
属性 的 null
值,因为它不可为空。
为了解决您的具体问题,您只需将 pkId
设置为可为 null 的 int
,如下所示:
public class PaymentTypeBORequest
{
public int? pkId { get; set; }
...
}
如果您还想对不可为 null 的 isSystem
和 isActive
属性允许 null
,您可以对这些字段执行相同的操作。