JsonConvert - принудительно возвращает значение MissingMember - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть класс FilterDto, который я использую для отправки информации фильтра в мое клиентское приложение. Например:

public class FilterDto
{
    public string Code { get; set; } = "Default code";
    public string Description { get; set; }
}

Это сериализовано как:

[
    {
        field: 'Code',
        type: 'text',
        defaultValue: 'Default code'
    },
    {
        field: 'Description ',
        type: 'text',
        defaultValue: null
    }
]

Так что в моем клиенте я могу сделать два input text для данных полей. И когда пользователь фильтрует отправленный обратно JSON, это что-то вроде:

{
    Code: 'code to filter',
    Description: 'description to filter'
}

И я десериализую это как:

var filter = JsonConvert.DeserializeObject(json, typeof(FilterDto));
Console.WriteLine(filter.Code); // code to filter

Проблема в том, что если пользователь решит стереть значение по умолчанию для кода, в приведенном выше примере у меня будет JSON:

{
    Description: 'description to filter'
}

А при десериализации у меня будет:

var filter = JsonConvert.DeserializeObject(json, typeof(FilterDto));
Console.WriteLine(filter.Code); // Default code

Есть ли способ установить Code в ноль вместо его значения по умолчанию, если он отсутствует в JSON?

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Попробуйте это:

        public class FilterDto
        {
            private const string DefaultValue = "Default code";

            [OnDeserialized]
            internal void OnDeserializedMethod(StreamingContext context)
            {
                if (Code == DefaultValue)
                {
                    Code = null; //set to null or string.empty
                }
            }

            public string Code { get; set; } = DefaultValue;
            public string Description { get; set; }
        }
0 голосов
/ 29 апреля 2019

Я полагаю, то, что вы ищете, уже объяснено здесь

.

Кроме того, если свойство не существует, вы можете добавить

[JsonProperty(PropertyName ="defaultValue", NullValueHandling = NullValueHandling.Include, DefaultValueHandling = DefaultValueHandling.Populate)]

также эта статья даст вам представление о том, как охватить нулевое значение: здесь

...