2015-06-22 156 views
12

我使用Json.Net序列化並反序列化json和返回類。使用Json.Net反序列化時忽略一個屬性ItemRequired = Required.Always

我添加到標記爲[JsonObject(ItemRequired = Required.Always)](或Required.Always)的新類別獲得專有屬性。這將導致以下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); 
} 

回答

19

顯然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; }} 
} 
相關問題