我正在使用Json.Net将类序列化和反序列化为json并返回。
我添加了一个标有[JsonObject(ItemRequired = Required.Always)]
(或Required.Always
)的新类,这是一个新的get-only属性。这导致以下JsonSerializationException
:
Newtonsoft.Json.JsonSerializationException:在JSON中找不到必需的属性
'<PropertyName>'
我认为用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);
}
答案 0 :(得分:24)
显然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; }}
}