2009-11-25 17 views
6

मैं एक जेसन.NET पुस्तकालय का उपयोग कर रहा हूँ। JSON में सी # के माध्यम से सरणीकरण/deserializing सरणी का सबसे सुविधाजनक तरीका क्या है? , जब मैंजेसन.नेट: धारावाहिक/deserializing सरणी

JObject o = JObject.Parse(File.ReadAllText("input.txt")) 

और फिर:

{ 
    "Name": "Christina", 
    "Gender": "female", 
    "Favorite_numbers": [11, 25 ,23] 
} 

मैं एक चर करने के लिए फ़ाइल से ऊपर पाठ पढ़ रहा हूँ: उदाहरण के लिए, मैं निम्नलिखित पाठ (फ़ाइल से पढ़ने) deserialize करने के लिए कोशिश कर रहा हूँ '

int[] num = (int[]) o["Favorite_numbers"] 

मैं एक त्रुटि प्राप्त के साथ एक सरणी [11, 24, 23] निकालने की कोशिश कर रहा हूँ।

मैं क्या गलत कर रहा हूं? मैं एक सरणी को सही ढंग से कैसे पढ़ूं? मैं निम्नलिखित प्रकार के [[1, 2, 3], [4, 5, 6]] के 2-मंद सरणी को सही ढंग से कैसे पढ़ूं?

+1

त्रुटि क्या है ? –

उत्तर

2

Favorite_numbers संपत्ति JArray प्रकार होने जा रही है क्योंकि इसका अनुमान लगाने के लिए कोई तरीका नहीं है कि यह किस प्रकार होना चाहिए। उस ऑब्जेक्ट को deserializing का सबसे सुविधाजनक तरीका इसके लिए एक सी # कक्षा परिभाषित करने जा रहा है और जेएसओएन को अपनी परिभाषित कक्षा में deserialize करने के लिए JsonConvert.DeserializeObject<T>(...) विधि (ओं) का उपयोग करें।

1

आप जो कर रहे हैं उस पर निर्भर करता है। आपके मामले में सबसे आसान तरीका JsonConverter बनाना होगा। तुम कर सकते हो तो निम्नलिखित:

public class IntArrayConverter : JsonCreationConverter<int[]> 
{ 

    protected override int[] Create(Type objectType, JArray jArray) 
    { 
     List<int> tags = new List<int>(); 

     foreach (var id in jArray) 
     { 
      tags.Add(id.Value<int>()); 
     } 

     return tags.ToArray(); 
    } 
} 

public abstract class JsonCreationConverter<T> : JsonConverter 
{ 
    /// <summary> 
    /// Create an instance of objectType, based properties in the JSON Array 
    /// </summary> 
    /// <param name="objectType">type of object expected</param> 
    /// <param name="jObject">contents of JSON Array that will be deserialized</param> 
    /// <returns></returns> 
    protected abstract T Create(Type objectType, JArray jObject); 

    public override bool CanConvert(Type objectType) 
    { 
     return typeof(T).IsAssignableFrom(objectType); 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     JArray jArray = JArray.Load(reader); 

     T target = Create(objectType, jArray); 

     return target; 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     throw new NotImplementedException(); 
    } 
} 

फिर अपनी नई विशेषता के साथ अपने मॉडल को परिभाषित:

public class Person 
{ 
    public string Name { get; set; } 
    public string Gender { get; set; } 
    [JsonConverter(typeof(IntArrayConverter))] 
    public int[] Favorite_numbers { get; set; } 
} 

और आप सामान्य रूप से इसका इस्तेमाल कर सकते हैं:

Person result = JsonConvert.DeserializeObject<Person>(@"{ 
       ""Name"": ""Christina"", 
       ""Gender"": ""female"", 
       ""Favorite_numbers"": [11, 25 ,23] 
      }"); 
संबंधित मुद्दे