2012-05-03 17 views
8

मुझे Visual .NET के साथ सी # ऑब्जेक्ट्स में JSON स्ट्रिंग को पार्स करने का तरीका समझने में समस्या हो रही है। काम बहुत आसान है, लेकिन मैं अभी भी खो दिया हूँ ... मैं इस स्ट्रिंग मिलती है:पार्सिंग जेसन ऑब्जेक्ट्स

{"single_token":"842269070","username":"example123","version":1.1} 

और यह कोड मैं कहाँ desterilize करने की कोशिश है:

namespace _SampleProject 
{ 
    public partial class Downloader : Form 
    { 
     public Downloader(string url, bool showTags = false) 
     { 
      InitializeComponent(); 
      WebClient client = new WebClient(); 
      string jsonURL = "http://localhost/jev"; 
      source = client.DownloadString(jsonURL); 
      richTextBox1.Text = source; 
      JavaScriptSerializer parser = new JavaScriptSerializer(); 
      parser.Deserialize<???>(source); 
     } 

मुझे नहीं पता '<' और '>' के बीच क्या रखना है, और जो मैंने ऑनलाइन पढ़ा है, उससे मुझे एक नई कक्षा बनाना है ..? इसके अलावा, मैं आउटपुट कैसे प्राप्त करूं? एक उदाहरण उपयोगी होगा!

+0

Btw, JSON सबसे अधिक संभावना गलत है। मुझे संदेह है कि 'संस्करण' एक संख्या माना जाता है। – svick

उत्तर

8

एक नया वर्ग है कि आपके JSON जैसे में deserialized किया जा सकता है बनाएँ:

public class UserInfo 
{ 
    public string single_token { get; set; } 
    public string username { get; set; } 
    public string version { get; set; } 
} 

public partial class Downloader : Form 
{ 
    public Downloader(string url, bool showTags = false) 
    { 
     InitializeComponent(); 
     WebClient client = new WebClient(); 
     string jsonURL = "http://localhost/jev"; 
     source = client.DownloadString(jsonURL); 
     richTextBox1.Text = source; 
     JavaScriptSerializer parser = new JavaScriptSerializer(); 
     var info = parser.Deserialize<UserInfo>(source); 

     // use deserialized info object 
    } 
} 
2

हां, आपको अपनी जेएसओएन से मेल खाने वाली संपत्तियों के साथ एक नई कक्षा की आवश्यकता है।

MyNewClass result = parser.Deserialize<MyNewClass>(source); 
1

आप एक कक्षा कि JSON आप हो रही है के साथ मेल की जरूरत है और यह मान आबादी के साथ उस वर्ग की एक नई वस्तु वापस आ जाएगी।

7

यदि आप .NET 4 का उपयोग कर रहे हैं - गतिशील डेटाटाइप का उपयोग करें।

http://msdn.microsoft.com/en-us/library/dd264736.aspx

string json = "{ single_token:'842269070', username: 'example123', version:1.1}"; 

    JavaScriptSerializer jss = new JavaScriptSerializer(); 

    dynamic obj = jss.Deserialize<dynamic>(json); 

    Response.Write(obj["single_token"]); 
    Response.Write(obj["username"]); 
    Response.Write(obj["version"]); 
+1

क्या आप समझा सकते हैं कि इस प्रकार का उपयोग कैसे किया जा सकता है? क्योंकि 'deserialize (स्रोत)' वांछित प्रभाव नहीं होगा। – svick

+0

@svick वह Deserialize का उपयोग करने में सक्षम नहीं होगा। उन्हें शायद कुछ ऐसा करना होगा जैसा कि यहां चर्चा की गई है http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object। उसे उस मामले में दृढ़ता से टाइप की गई कक्षा बनाने की आवश्यकता नहीं होगी और केवल डायनामिक ऑब्जेक्ट का उपयोग करें: var dynObject = parser.Deserialize (स्रोत, टाइपऑफ (ऑब्जेक्ट); फिर गुणों को गतिशील रूप से एक्सेस करें। dynObject.single_token, dynObject उपयोगकर्ता नाम, आदि – phreak3eb

2

हमेशा की तरह एक वर्ग (या वर्गों का एक सेट बनाने होगा, और अधिक के लिए जटिल JSON तार) जो ऑब्जेक्ट का वर्णन करता है जिसे आप deserialize करना चाहते हैं और सामान्य पैरामीटर के रूप में इसका उपयोग करें।

एक अन्य विकल्प Dictionary<string, object> में JSON deserialize करने के लिए है:

parser.Deserialize<Dictionary<string, object>>(source); 

इस तरह, आप डेटा का उपयोग कर सकते हैं, लेकिन मैं जब तक आप के लिए है कि आप यह करना सुझाव नहीं होगा।

0

के बाद कोड है ..

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); 

     request = WebRequest.Create("https://myipaddress/api/admin/configuration/v1/conference/1/"); 

     request.Credentials = new NetworkCredential("admin", "admin123"); 
     // Create POST data and convert it to a byte array. 
     request.Method = "GET";   

       // Set the ContentType property of the WebRequest. 
     request.ContentType = "application/json; charset=utf-8";   


     WebResponse response = request.GetResponse(); 
     // Display the status. 
     Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
     // Get the stream containing content returned by the server. 
     dataStream = response.GetResponseStream(); 
     // Open the stream using a StreamReader for easy access. 
     StreamReader reader = new StreamReader(dataStream); 
     // Read the content. 
     string responseFromServer = reader.ReadToEnd(); 
     JavaScriptSerializer js = new JavaScriptSerializer(); 
     var obj = js.Deserialize<dynamic>(responseFromServer); 
     Label1.Text = obj["name"]; 
     // Display the content. 
     Console.WriteLine(responseFromServer); 
     // Clean up the streams. 
     reader.Close(); 
     dataStream.Close(); 
     response.Close(); 
संबंधित मुद्दे