2016-11-10 3 views
0

私はJson文字列を返すWebサービスを持っています。 私の問題は、私は読むことの困難を持っているということです、それ私が試した webserviceから複数のJsonデータを読み取る

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

が、どのように私は、「学生」と「場所」からの値を得ることができますか? をjavascriptで使用しました。 "var j = jQuery.parseJSON(msg.d);"しかし、私は、これは文字列の一例である

異なるだろうC#のコードを考える:あなたはstudentslocationsのプロパティ値を保持する必要があるタイプCinfoRichiestaのコレクションにデシリアライズしている

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

答えて

0

それは、すべての検証だ後は、あなたができるはずです(私はダブルjson2csharp.com全体応答文字列を貼り付けて、それをチェックすることをお勧めします)

をあなたのJSONが正しくフォーマットされたと仮定して、クラス定義が応答するのに適して内部的にそのようstudentslocationsコレクションを見るために:あなた3の結果を与える必要があります

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

編集

私はあなたがstudentslocationsのプロパティにアクセスできませんなぜあなたの主な質問があると思います。

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

とあなたのlocationsクラスは次のようになります:

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

あなたは、その後のような、studentslocationsの両方をinstaniates questionsクラスを持っている必要があります。

Studentsのような独自のクラスであることを確認してください
public class Questions 
{ 
    public int id { get; set; } 
    public int book { get; set; } 
    public Student students { get; set; } 
    public Locations locations { get; set; } 
} 

JSON逆シリアル化を処理する場合、オブジェクトプロパティn ames(すなわちclass)は、大文字小文字の点で応答文字列と一致します。だから、もしあなたがpublic int Themeと書くと、それは直接マップされません。

コーディング標準の面で少し迷惑な、ちょっとホ:-)

0

まず第一に、あなたが持っている最初の問題のthatsので、あなたのJSONは有効ではありません。これは例えばhttp://jsonlint.com/で確認できます。

私は現在、以下の方法でこれを修正しました

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

第二には、あなたのクラスは、現在のJSONと、これはあなたがデシリアライズすることができます。この後、この

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; } 
    } 

ようになるはずです、正しいはずですそれが好きです

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

そして、あなたは情報を得ることができますこのようにn

myobj.Questions.students._class 
+0

偉大なそれは非常にいいです –

関連する問題