2015-12-02 16 views
18

Czy istnieje prosty sposób do analizowania poniżej JSON w C#Najprostszym sposobem analizowania odpowiedzi JSON

{"type":"text","totalprice":"0.0045","totalgsm":"1","remaincredit":"44.92293","messages": [ 
{"status":"1","messageid":"234011120530636881","gsm":"923122699633"} 
]} 

aw przypadku wielu wyników.

+3

użyć biblioteki takiej jak Json.NET – Jehof

+0

Oto sposób na to [Analizowanie zagnieżdżonych obiektów json za pomocą json.net] (http: // stackoverflow. com/questions/13204663/parsing-nested-json-objects-with-json-net). – Prabhat

+0

[This] (http://stackoverflow.com/questions/6620165/how-can-i-parse-json-with-c) prawdopodobnie pomoże ci podczas korzystania z Json.NET – croxy

Odpowiedz

36

Wykonaj następujące kroki:

  1. Konwersja JSON do C# za pomocą json2csharp.com;
  2. Utwórz plik klasy i umieść tam powyższy wygenerowany kod;
  3. Dodaj bibliotekę Newtonsoft.Json do projektu za pomocą Menedżera pakietów Nuget;
  4. konwertować JSON otrzymał od swojej usługi przy użyciu tego kodu: (.. Krępuj się zmienić nazwę RootObject na coś bardziej sensownego wam inne klasy powinny pozostać niezmienione)

    RootObject r = JsonConvert.DeserializeObject<RootObject>(json); 
    

1

Dla mnie ... najprostszym sposobem na to jest użycie JSON.net do deserializacji do obiektu reprezentującego obiekt, na przykład:

public class Message 
{ 
    public string status { get; set; } 
    public string messageid { get; set; } 
    public string gsm { get; set; } 
} 

public class YourRootEntity 
{ 
    public string type { get; set; } 
    public string totalprice { get; set; } 
    public string totalgsm { get; set; } 
    public string remaincredit { get; set; } 
    public List<Message> messages { get; set; } 
} 

I to zrobić:

YourRootEntity data JsonConvert.DeserializeObject<YourRootEntity>(jsonStrong); 
+1

:(1 min później haha ​​ – SergioZgz

+0

To nie zadziała. Własność 'Message' ma obiekt json, a nie tablicę obiektów.' Public List {get; set;} 'nie jest wymagane proste' public Message messages {get; set;} 'zadziałałoby – Prabhat

+0

Po prostu utworzyłem je za pomocą json2csharp, aby napisać próbkę – SergioZgz

19

Można bezpiecznie korzystać z wbudowanych w JavaScriptSerializer bez odwoływania dodatkowych bibliotek zewnętrznych:

var ser = new System.Web.Script.Serialization.JavaScriptSerializer(); 
ser.DeserializeObject(json); 
+3

To było pomocne dla mnie. DeserializeObject zwrócił obiekt typu Słownik . Obiekty w słowniku w ciągi, tablice obiektów lub więcej obiektów Słownika

+4

IMO jest to metoda, którą można wykonać, jeśli po prostu wykonujesz prostą analizę lub jeśli nie chcesz w ogóle korzystać z biblioteki innej firmy. – YYamil

3

znalazłem sposób, żeby go bez użycia zewnętrznego interfejsu API

 using (var w = new WebClient()) 
     { 
      var json_data = string.Empty; 
      string url = "YOUR URL"; 
      // attempt to download JSON data as a string 
      try 
      { 
       json_data = w.DownloadString(url); 
       JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
       var result = jsSerializer.DeserializeObject(json_data); 
       Dictionary<string, object> obj2 = new Dictionary<string, object>(); 
       obj2=(Dictionary<string,object>)(result); 

       string val=obj2["KEYNAME"].ToString(); 
      } 
      catch (Exception) { } 
      // if string with JSON data is not empty, deserialize it to class and return its instance 
     } 
Powiązane problemy