2012-06-12 13 views
6

मैं बहुत की तरह एक वर्ग है:JSON.Net में मुझे JsonProperty का नाम कैसे प्राप्त होगा?

[JsonObject(MemberSerialization.OptIn)] 
public class foo 
{ 
    [JsonProperty("name_in_json")] 
    public string Bar { get; set; } 
    // etc. 
    public Dictionary<string, bool> ImageFlags { get; set; } 
} 

JSON मूल रूप से एक CSV फ़ाइल से उत्पन्न होता है, प्रत्येक पंक्ति एक foo वस्तु का प्रतिनिधित्व - यह मूल रूप से फ्लैट है, तो मैं imageflags करने के लिए कुछ चाबियाँ मैप करने के लिए की जरूरत है।

मैंने here उदाहरण के आधार पर कस्टमक्रिएशन कनवर्टर लिखने की कोशिश की।

यह झंडे को ठीक करने के लिए प्रतीत होता है, लेकिन यह सामान्य गुणों को सेट करने में विफल रहता है - यह 'name_in_json' के बजाय 'बार' की तलाश में है।

मैं foo के किसी ऑब्जेक्ट के लिए 'name_in_json' मान प्राप्त करने के बारे में कैसे जाउंगा?

संपादित:

वर्तमान समाधान:

var custAttrs = objectType.GetProperties().Select(p =>  p.GetCustomAttributes(typeof(JsonPropertyAttribute), true)).ToArray(); 
var propNames = objectType.GetProperties().Select(p => p.Name.ToLower()).ToArray(); 
Dictionary<string, string> objProps = new Dictionary<string, string>(); 
for (int i = 0; i < propNames.Length; i++) 
    // not every property has json equivalent... 
    if (0 == custAttrs[i].Length) 
    { 
     continue; 
    } 

    var attr = custAttrs[i][0] as JsonPropertyAttribute; 
    objProps.Add(attr.PropertyName.ToLower(), propNames[i].ToLower()); 
} 

उत्तर

3

ठीक है, उदाहरण में ऊपर आप के साथ प्रकार से सभी संपत्ति नाम प्राप्त:

var objProps = objectType.GetProperties().Select(p => p.Name.ToLower()).ToArray(); 

तो आप केवल का उपयोग वास्तविक संपत्ति का नाम, इसके बजाय आप क्या करेंगे, प्रत्येक संपत्ति के प्रकार के कस्टम गुण प्राप्त होते हैं JsonPropertyGetCustomAttributes विधि का उपयोग कर, और उससे जेसन संपत्ति का नाम प्राप्त करें।

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