2011-02-26 12 views
27

मैं प्राप्त करने की आवश्यकता :को क्रमानुसार नेट शब्दकोश <स्ट्रिंग, स्ट्रिंग> JSON कुंजी मान जोड़ी वस्तु में

{ 
    "name":"package_name", 
    "type": 
    [ 
     [ 
      { 
       "Key":"http:\/\/random.url.as.key", 
       "Value":"random\/value" 
      } 
     ] 
    ] 
} 
,210

जबकि, साथ:

var package = new 
{ 
    name = "package_name", 
    type = new 
    { 
     http_random_url_as_key = "random/value" 
    } 
}; 

मैं:

{ 
    "name":"package_name", 
    "type": 
    { 
     "http_random_url_as_key":"random/value" 
    } 
} 

मैं obsure http नहीं मिल सकता है: //random.url.as.key है कि मैं की जरूरत है। मैंने जावास्क्रिप्टसेरलाइज़र, डेटाकंट्रैक्टजसनसेरियलाइज़र, और जेसन.नेट के लिए कस्टम कनवर्टर का उपयोग करने की कोशिश की है, सभी सीमित सफलता/कमियों के साथ।

तार पर एक साधारण JSON ऑब्जेक्ट प्राप्त करने के लिए मुझे एक बेहतर तरीका/कुछ दिखाना चाहिए!

+0

क्या आप JSON में क्रमानुसार करने का उपयोग कर रहे हो जाएगा देना चाहिए ? – Vadim

+3

आप पहले 'पैकेज' कक्षा संकलित नहीं करेंगे। और क्या आप सुनिश्चित हैं कि फ़ील्ड * टाइप * एक 'सूची <शब्दकोश <स्ट्रिंग, स्ट्रिंग >>' है? ऐसा लगता है कि आप जेएसओएन में कनवर्ट करते समय इसे 'शब्दकोश <स्ट्रिंग, स्ट्रिंग>' की तरह करना चाहते हैं। –

+0

जेएसओएन को .net कोड को क्रमबद्ध करने और वापस वापस करने के लिए इसका उपयोग करें। http://james.newtonking.com/projects/json-net.aspx – Deepak

उत्तर

45

ठीक है, पहले उदाहरण के लिए, सबसे पहले, आपके पास मूल रूप से KeyValuePair<string,string> ऑब्जेक्ट्स के संग्रह की एक सूची है।

तो, कारण यह है कि यह JSON दिखाया में परिवर्तित हो जाता है:

{ 
    "name":"package_name", 
    "type": 
    [ // List<Dictionary<string,string>> 
     [ // Dictionary<string,string>, a list of KeyValuePair<string,string> objects 
      { // KeyValuePair<string,string> object 
       "Key":"http:\/\/random.url.as.key", 
       "Value":"random\/value" 
      } 
     ] 
    ] 
} 

जहां तक ​​आपके दूसरे उदाहरण के रूप में, आप एक गतिशील वस्तु पैदा कर रहे एक गतिशील ऑब्जेक्ट वाला, और की प्रत्येक वस्तु के फ़ील्ड महत्वपूर्ण मूल्य प्रदान कर रहे हैं।

तो, मैं Dictionary<string,string> के आसपास बाहरी List<> खुदाई सुझाव है, तो जब आपके क्रमबद्धता कर JSON.Net पुस्तकालय में Newtonsoft.Json.Converters.KeyValuePairConverter वस्तु का इस्तेमाल करते हैं:

string json = JsonConvert.SerializeObject(package, new KeyValuePairConverter()); 

आशा है कि मदद करता है।

संपादित

ठीक है, तो मैं सोचा मैं एक और अधिक ठोस उदाहरण

public class Package 
{ 
    public Package() 
    { 
     name = ""; 
     type = new Dictionary<string, string>(); 
    } 

    public string name { get; set; } 
    public Dictionary<string, string> type { get; set; } 
} 

Package package = new Package(); 
package.name = "package_name"; 
package.type.Add("http://random.url.as.key", "random/value"); 
string json = JsonConvert.SerializeObject(package, new KeyValuePairConverter()); 

यह आपको उत्पादन

{ 
    "name":"package_name", 
    "type": 
    { 
     "http://random.url.as.key":"random/value" 
    } 
} 
+0

यदि मैं दोनों wcf रखना चाहता हूं और जेसन एंडपॉइंट्स, यह कोड कैसे फिट होगा? –

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