使用带有ItemRequired = Required.Always的Json.Net进行反序列化时忽略属性

我正在使用Json.Net将类序列化和反序列化为json和back。

我添加了一个标有[JsonObject(ItemRequired = Required.Always)] (或Required.Always )的类,这是一个新的get-only属性。 这导致以下JsonSerializationException

Newtonsoft.Json.JsonSerializationException:在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(serializeObject); } 

显然JsonIgnore只会在这种情况下控制序列化。 JsonIgnore需要指定不应将FullName属性序列化为json表示。

要在反序列化期间忽略该属性,我们需要添加带有Required = Required.DefaultJsonProperty注释(这意味着不需要)。

所以,这是如何避免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; }} }