2012-12-12 4 views
24

私はJSONを初めて使っています。私のasp.netアプリケーションでは、jsonの文字列を解析したいと思います.Jsonのデータを読み書きするためにNewtonsoft.Jsonパッケージを使用しました。今、単純なJSONデータを解析できます。しかし、今私は構文解析のためにいくつかの複雑なjsonデータを受け取りました。私は少しそれを打ちました。Newtonsoft.Jsonパッケージを使用してC#(4.0)でjson文字列を解析するには?

これはJSONデータである:

{ 
    quizlist: [ 
    { 
      QUIZ: { 
       'QPROP': [ 
        { 
         'name': 'FB', 
         'intro': '', 
         'timeopen': '1347871440', 
         'timeclose': '1355733840', 
         'timelimit': '0', 
         'noofques': '5', 
         'QUESTION': { 
          'QUEPROP': [ 
           { 
            'questiontext': 'Scienceisbasedont', 
            'penalty': '0.3333333', 
            'qtype': 'shortanswer', 
            'answer': 'cause-and-effect', 
            'mark' : '5', 
            'hint': '' 
           }, 
           { 
            'questiontext': 'otherscientistsevaluateit', 
            'penalty': '0.3333333', 
            'qtype': 'shortanswer', 
            'answer': 'Peerreview', 
            'mark' : '5', 
            'hint': '' 
           }, 
           { 
            'questiontext': 'Watchingavariety', 
            'penalty': '0.3333333', 
            'qtype': 'shortanswer', 
            'answer': 'inductive', 
            'mark' : '5', 
            'hint': '' 
           }, 
           { 
            'questiontext': 'coveriesorideas', 
            'penalty': '0.3333333', 
            'qtype': 'shortanswer', 
            'answer': 'paradigmshift', 
            'mark' : '5', 
            'hint': '' 
           }, 
           { 
            'questiontext': 'proportions', 
            'penalty': '0.3333333', 
            'qtype': 'shortanswer', 
            'answer': 'fixed', 
            'mark' : '5', 
            'hint': '' 
           } 
          ] 
         } 
        } 
       ] 
      } 
     } 
    ] 
} 

これは私のC#のコードです:

dynamic dynObj = JsonConvert.DeserializeObject(jsonString); 

      foreach (var data in dynObj.quizlist) 
      { 
       foreach (var data1 in data.QUIZ.QPROP) 
       { 
        Response.Write("Name" + ":" + data1.name + "<br>"); 
        Response.Write("Intro" + ":" + data1.intro + "<br>"); 
        Response.Write("Timeopen" + ":" + data1.timeopen + "<br>"); 
        Response.Write("Timeclose" + ":" + data1.timeclose + "<br>"); 
        Response.Write("Timelimit" + ":" + data1.timelimit + "<br>"); 
        Response.Write("Noofques" + ":" + data1.noofques + "<br>"); 
       } 
       } 

私はnoofquesがQPROP配列内のオブジェクトまで解析できることができます解析する必要がobjects.Now data.QUIZ.QPROP.QUESTION.QUEPROP配列オブジェクト...

しかし、私は完全に解析できませんでした。 ..

この問題から抜け出すために私を導いてください...

答えて

14
foreach (var data in dynObj.quizlist) 
{ 
    foreach (var data1 in data.QUIZ.QPROP) 
    { 
     Response.Write("Name" + ":" + data1.name + "<br>"); 
     Response.Write("Intro" + ":" + data1.intro + "<br>"); 
     Response.Write("Timeopen" + ":" + data1.timeopen + "<br>"); 
     Response.Write("Timeclose" + ":" + data1.timeclose + "<br>"); 
     Response.Write("Timelimit" + ":" + data1.timelimit + "<br>"); 
     Response.Write("Noofques" + ":" + data1.noofques + "<br>"); 

     foreach (var queprop in data1.QUESTION.QUEPROP) 
     { 
      Response.Write("Questiontext" + ":" + queprop.questiontext + "<br>"); 
      Response.Write("Mark" + ":" + queprop.mark + "<br>"); 
     } 
    } 
} 
9

あなたは適切なC#クラスを作成するには、このツールを使用することができます。

​​

、あなたはあなたを作成したクラスを持っています単にオブジェクトの文字列を変換することができます:ここでは

public static T ParseJsonObject<T>(string json) where T : class, new() 
    { 
     JObject jobject = JObject.Parse(json); 
     return JsonConvert.DeserializeObject<T>(jobject.ToString()); 
    } 

をそのクラス:http://ge.tt/2KGtbPT/v/0?c

名前空間を修正してください。

よろしく

+0

:私は私のDB.for例に、その情報を格納したい私のapplication.Iでそれを使うのですfiles.Howいくつかの.csファイルを作成しThanks.Itは、私のJSON文字列は、私はそれを保存したい、その後の配列が含まれていますC#の配列をコピーしてからデータベースにコピーしてください... – Saravanan

+1

OK、プロジェクトにそのcsファイルを追加して名前空間を修正してください。次に、未処理のjson文字列を取得するときに、SampleResponse1を呼び出すことによってオブジェクトに変換できます。obj = ParseJsonObject (jsonStr);注意! SamplemResponse1は、別の名前を設定せずにGenerateをクリックした場合、そのツールによって生成されるルートクラスです。おそらくあなたはそれを – Vlad

+0

に変更したいでしょう:それでは、jsonの文字列から解析されたすべての詳細をC#データ構造体に保存するには... – Saravanan

5

あなたはタイプクイズの独自のクラスを作成し、強力なタイプでデシリアライズできます

例:

quizresult = JsonConvert.DeserializeObject<Quiz>(args.Message, 
       new JsonSerializerSettings 
       { 
        Error = delegate(object sender1, ErrorEventArgs args1) 
        { 
         errors.Add(args1.ErrorContext.Error.Message); 
         args1.ErrorContext.Handled = true; 
        } 
       }); 

そして、あなたはまた、スキーマ検証を適用することができ。

http://james.newtonking.com/projects/json/help/index.html

3

これは、GoogleマップのAPIの例を取ることによって、JSONの構文解析の簡単な例です。指定された郵便番号の都市名が返されます。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Newtonsoft.Json; 
using System.Net; 

namespace WebApplication1 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     WebClient client = new WebClient(); 
     string jsonstring; 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      jsonstring = client.DownloadString("http://maps.googleapis.com/maps/api/geocode/json?address="+txtzip.Text.Trim()); 
      dynamic dynObj = JsonConvert.DeserializeObject(jsonstring); 

      Response.Write(dynObj.results[0].address_components[1].long_name); 
     } 
    } 
} 
関連する問題