2015-06-22 5 views
12

मैं जेसन और पीठ के लिए कक्षाओं को क्रमबद्ध और deserialize करने के लिए जेसन.Net का उपयोग कर रहा हूँ।आइटम की आवश्यकता के साथ Json.Net का उपयोग करके deserializing जब किसी आइटम को अनदेखा करें। हमेशा

मैंने [JsonObject(ItemRequired = Required.Always)] (या Required.Always) के साथ चिह्नित एक कक्षा में जोड़ा जो एक नई केवल-संपत्ति है।

Newtonsoft.Json.JsonSerializationException:: यह निम्नलिखित JsonSerializationException में जो परिणाम आवश्यक संपत्ति '<PropertyName>' JSON

मैं अंकन सोचा कि JsonIgnore साथ संपत्ति मुद्दे को हल करेंगे में नहीं मिला, लेकिन वह काम नहीं करता ।

मैं जेसन को कैसे बता सकता हूं। इस संपत्ति को अनदेखा किया जाना चाहिए?

यहाँ एक न्यूनतम मुद्दा प्रजनन उदाहरण है:

[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 संपत्ति को जेसन प्रतिनिधित्व के लिए क्रमबद्ध नहीं किया जाना चाहिए।

deserialization के दौरान संपत्ति को अनदेखा करने के लिए हमें एनोटेशन Required = Required.Default (जिसका मतलब आवश्यक नहीं है) जोड़ने की आवश्यकता है।

[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; }} 
} 
:

तो, यह JsonSerializationException से बचने के लिए कैसे है

संबंधित मुद्दे