2016-11-10 4 views
0

Ich habe einen Web-Service, der eine JSON-Zeichenfolge zurückgibt. mein Problem ist, dass ich Schwierigkeiten eslesen Sie mehrere JSON-Daten von Webservice

i mit versucht zu lesen:

JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
      string jsonData = reader.ReadToEnd(); 
      var myobj = jsSerializer.Deserialize<List<CinfoRichiesta>>(jsonData); 

aber wie kann ich Werte von „Studenten“ erhalten und „Orte“? mit Javascript ich verwendet: "var j = jQuery.parseJSON (msg.d);" aber ich denke, mit C# Code würde

dies ist ein Beispiel für String unterschiedlich sein:

{"Questions":{ 
    "id":"2", 
    "BOOK":"3", 
     "students":{ 
     "class":"3", 
     "theme","43" 
     }, 
     "locations":{ 
     "h":"0", 
     "L":"3" 
     } 
} 
} 

Antwort

0

Sie Deserialisieren auf eine Sammlung von Typ CinfoRichiesta, die einen Eigenschaftswert für students und locations halten sollen.

Unter der Annahme, dass Ihr JSON richtig formatiert ist und Ihre Klassendefinition ist geeignet für die Reaktion (I Doppel es durch Einfügen das gesamte Antwortstring in json2csharp.com Überprüfung wird empfohlen)

Sobald das alles validiert ist, sollten Sie in der Lage sein,

foreach(Question q in myobj) 
{ 
    Console.WriteLine(q.students.class) 
} 

, die das Ergebnis von 3 geben soll: die students und locations Sammlungen intern wie so zu sehen.

bearbeiten

Ich denke, Ihre wichtigste Frage ist, warum Sie die Eigenschaften von students und locations Zugang sind nicht in der Lage. Stellen Sie sicher, Students ist eine eigene Klasse als solche:

public class Students 
{ 
    public int class { get; set; } 
    public int theme { get; set; } 
} 

und Ihre locations Klasse sollte sein:

public class Locations 
{ 
    public int h { get; set; } 
    public int l { get; set; } 
} 

Sie sollten dann eine questions Klasse haben, die sowohl students und locations als solche instaniates:

public class Questions 
{ 
    public int id { get; set; } 
    public int book { get; set; } 
    public Student students { get; set; } 
    public Locations locations { get; set; } 
} 

Wenn Sie mit der JSON-Deserialisierung arbeiten, ist es wichtig, dass Ihre Objekteigenschaft n Ames (zB class) stimmen mit der Antwortzeichenfolge überein. Wenn Sie es als public int Theme geschrieben haben, wird es nicht direkt zugeordnet.

Etwas ärgerlich in Bezug auf den Coding-Standards, aber hey ho :-)

0

First off, ist Ihre JSON nicht gültig, so das ist das erste Problem, das Sie haben. Sie können dies beispielsweise unter http://jsonlint.com/ überprüfen.

Im Moment habe ich dies in der folgenden Art und Weise festgelegt:

{ 
    "Questions": { 
     "id": "2", 
     "BOOK": "3", 
     "students": { 
      "class": "3", 
      "theme": "na", 
      "43": "na" 
     }, 
     "locations": { 
      "h": "0", 
      "L": "3" 
     } 
    } 
} 

Zweite Klasse soll mit dem aktuellen JSON richtig sein, so etwas wie diese Danach

public class Rootobject 
    { 
     public Questions Questions { get; set; } 
    } 

    public class Questions 
    { 
     public string id { get; set; } 
     public string BOOK { get; set; } 
     public Students students { get; set; } 
     public Locations locations { get; set; } 
    } 

    public class Students 
    { 
     public string _class { get; set; } 
     public string theme { get; set; } 
     public string _43 { get; set; } 
    } 

    public class Locations 
    { 
     public string h { get; set; } 
     public string L { get; set; } 
    } 

aussehen sollten Sie deserialisieren können es so

var myobj = jsSerializer.Deserialize<List<Rootobject>>(jsonData); 

Und dann können Sie die informatio bekommen n wie diese

myobj.Questions.students._class 
+0

Großartig ist es sehr schön –