Невозможно использовать опцию JIL Serializer ExcludeNulls
Я не могу использовать опцию JIL's 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
}
1 ответ
Описание для excludeNulls
Вариант:
писать или нет элементы объекта, чье значение
null
(акцент мой)
Это говорит о том, что это влияет только на операции сериализации, а не операции десериализации.
При сериализации объекта с excludeNulls
установлен в true
, Jil не будет записывать свойства в JSON, если они имеют null
ценности. В вашем примере вы десериализуете в PaymentTypeBORequest
объект, который сам не поддерживает null
значения для pkId
собственность, так как это не обнуляемо.
Чтобы решить вашу конкретную проблему, вы можете просто установить pkId
быть обнуляемым int
, вот так:
public class PaymentTypeBORequest
{
public int? pkId { get; set; }
...
}
Если вы хотите также разрешить null
для не обнуляемых isSystem
а также isActive
свойства, вы можете выполнять те же операции над этими полями.