使用带有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.Default
的JsonProperty
注释(这意味着不需要)。
所以,这是如何避免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; }} }