Игнорировать свойство при десериализации с помощью Json.Net с ItemRequired = Required.Always
Я использую Json.Net для сериализации и десериализации классов для json и back.
Я добавил класс, помеченный [JsonObject(ItemRequired = Required.Always)]
(или Required.Always
) новым свойством get-only. Это приводит к следующему JsonSerializationException
:
Newtonsoft.Json.JsonSerializationException: Обязательное свойство '<PropertyName>'
не найдено в JSON
Я думал, что это свойство с JsonIgnore
решит проблему, но это не сработает.
Как я могу сообщить Json.Net, что это свойство следует игнорировать?
Вот минимальный пример, воспроизводящий проблему:
[JsonObject(ItemRequired = Required.Always)]
public class Hamster
{
public string FirstName { get; set; }
public string LastName { get; set; }
[JsonIgnore]
public string FullName { get { return FirstName + LastName; }}
}
private static void Main()
{
var hamster = new Hamster {FirstName = "Bar", LastName = "Arnon"};
var serializeObject = JsonConvert.SerializeObject(hamster);
var deserializeObject = JsonConvert.DeserializeObject<Hamster>(serializeObject);
}
Ответы
Ответ 1
Очевидно, что JsonIgnore
будет контролировать сериализацию в этом случае. JsonIgnore
требуется указать, что свойство FullName
не должно быть сериализовано в представлении json.
Чтобы игнорировать свойство во время десериализации, нам нужно добавить аннотацию JsonProperty
с помощью Required = Required.Default
(что означает, что это не требуется).
Итак, как избежать JsonSerializationException
:
[JsonObject(ItemRequired = Required.Always)]
public class Hamster
{
public string FirstName { get; set; }
public string LastName { get; set; }
[JsonIgnore]
[JsonProperty(Required = Required.Default)]
public string FullName { get { return FirstName + LastName; }}
}