Невозможно использовать опцию JIL Serializer ExcludeNulls - PullRequest
0 голосов
/ 20 октября 2018

Я не могу использовать опцию JIL's Exclude Null.Вместо этого я получаю исключение:

JIL.DeserializationException: 'Ожидаемая цифра'

image

Ниже приведены фрагменты кода.

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 Ответ

0 голосов
/ 21 октября 2018

Описание для опции excludeNulls :

независимо от того, записать членов объекта со значением null

(выделено мной)

Это говорит о том, что оно влияет только на сериализацию операций, а не десериализацию операций.

Когда сериализуя объект с excludeNulls, установленным на true, Jil не будет записывать свойства в JSON, если они имеют значения null.В вашем примере вы десериализуете в объект PaymentTypeBORequest, который сам не поддерживает значения null для свойства pkId, так как он не может иметь значение null.

В порядкеЧтобы решить вашу конкретную проблему, вы можете просто установить для pkId значение nullable int, например:

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

Если вы также хотите разрешить null для ненулевых значений isSystemи isActive свойств, вы можете выполнять те же операции над этими полями.

...