2014-11-11 8 views
9

के साथ जेसन स्ट्रिंग को डेटा को सीरियलाइज़ करें मेरे पास एक विधि है जो एक कुंजी और मान स्वीकार करती है। दोनों चरों में गतिशील सामग्री हो सकती है।डायनामिक प्रॉपर्टी नाम

कुंजी => एक गतिशील स्ट्रिंग है जो सबकुछ हो सकती है जैसे उदा। "LastSentDate"
value => एक ऑब्जेक्ट है जो सब कुछ हो सकता है उदा। "2014-10-10"

चूंकि कुंजी "LastSentDate" जैसे गतिशील मान है या विधि में जो भी कुंजी पारित की जाती है, तो मैं चाहता हूं कि जेसन संपत्ति कुंजी स्ट्रिंग का मान है और सचमुच कुंजी नहीं है ..

public void SetRowVariable(string key, object value) 
{ 
    var obj = new { key = value }; // key property is literally taken maybe anonym object is not a good idea? 
    string jsonString = JsonConvert.SerializeObject(obj); 

    // jsonString should have that output => "{ "LastSentDate": "2014-10-10" }" 
} 

मुझे ओबीजे को क्रमबद्ध करने के लिए कैसे करना है कि मुझे कामकाजी आउटपुट मिल जाए?

यह भी संभव होना चाहिए कि "कुंजी" संपत्ति की तरह "!" § $% विशेष वर्ण शामिल कर सकते हैं & /() =? "`

मैं .NET 3.5 उदासी उपयोग कर रहा हूँ।

उत्तर

11

आप JObject (Newtonsoft.Json.Linq में) एक इस्तेमाल कर सकते हैं:

var obj = new JObject(); 
obj[key] = JToken.FromObject(value); 

string jsonString = obj.ToString(); 
0 आप एक Dictionary<string, object> का उपयोग कर कोशिश कर सकते हैं
+1

जॉबजेक्ट के AddOrUpdate व्यवहार जैसी कुछ चीजों को आजमाने के बाद मुझे कहना होगा कि आपकी टिप वास्तव में अच्छी है जो मैंने कोशिश की है: – Pascal

+0

@ पास्कल: मदद करने में खुशी हुई! –

+0

@AndrewWhitaker: रूट समाधान के साथ किसी ऑब्जेक्ट को क्रमबद्ध करने के लिए आपका समाधान भी एक अच्छा तरीका है: 'obj [value.GetType()। नाम] = JToken.FromObject (मान); ' – alexg

12

public void SetRowVariable(string key, object value) 
{ 
    var obj = new Dictionary<string, object>(); 
    obj[key] = value; // Of course you can put whatever crap you want here as long as your keys are unique 
    string jsonString = JsonConvert.SerializeObject(obj); 
    ... 
} 
+0

मुझे यकीन नहीं है कि जिसका उत्तर बेहतर या गीला है, मुझे वास्तव में @ एंड्रयू व्हिटकर से एक शब्दकोश बनाम समाधान के ऊपरी हिस्से की आवश्यकता है, सबसे पहले मुझे एक और SO प्रश्न करना है ... :-) – Pascal

+0

डारिन आप एमवीसी में चट्टान ;-) लेकिन यह बिंदु एंड्रयू को जाता है। लेकिन हे आपको 4 अपवॉट्स मिल गए हैं: पी – Pascal

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