2012-12-12 12 views
24

Jestem nowy w JSON.In mojej aplikacji asp.net chcę przetworzyć ciąg json.Tak, użyłem pakietu Newtonsoft.Json do odczytu i zapisu danych json.Teraz, potrafię parsować proste dane json. Ale teraz otrzymałem kilka złożonych danych json do parsowania.Tak, trochę uderzyłem w to.Jak analizować ciąg znaków json w C# (4.0) za pomocą pakietu Newtonsoft.Json?

To JSON danych:

{ 
    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': '' 
           } 
          ] 
         } 
        } 
       ] 
      } 
     } 
    ] 
} 

To mój C# Kod:

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

mogę stanie przetworzyć aż noofques sprzeciw w QPROP tablicy objects.Now mieć do analizowania data array.QUIZ.QPROP.QUESTION.QUEPROP obiektów również ...

Ale nie udało mi się parsować w pełni. ..

proszę kierować mi wyjść z tego problemu ...

Odpowiedz

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

Można użyć tego narzędzia, aby tworzyć odpowiednie klasy C#:

http://jsonclassgenerator.codeplex.com/

i kiedy masz zajęcia stworzył was może po prostu przekonwertować ciąg do obiektu:

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

tutaj zajęcia: http://ge.tt/2KGtbPT/v/0?c

Po prostu popraw przestrzenie nazw.

Pozdrowienia

+0

: Thanks.It stworzył kilka .CS files.How go używać w moich application.I chcesz przechowywać te informacje do mojego DB.for przykład, mój json ciąg zawiera tablice następnie chcę, aby przechowywać go w C# array, a następnie skopiuj do mojej bazy danych ... – Saravanan

+1

ok, po prostu dodaj pliki cs do projektu i popraw przestrzeń nazw. Następnie, gdy będziesz miał surowy ciąg JSONA, możesz go przekonwertować na obiekt, wywołując SampleResponse1 obj = ParseJsonObject (jsonStr); Uwaga! SamplemResponse1 jest generowany przez klasę root przez to narzędzie, jeśli klikniesz Wygeneruj bez ustawiania innej nazwy. Prawdopodobnie będziesz chciał go zmienić – Vlad

+0

: jak mogę zapisać wszystkie szczegóły przeanalizowane z łańcucha json do struktury danych C# ... – Saravanan

5

Można utworzyć własną klasę typu quiz, a następnie deserializować z silnym typu:

Przykład:

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

I można również zastosować sprawdzania poprawności schematu .

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

3

To jest prosty przykład JSON parsowania biorąc przykład Google Map API. Spowoduje to zwrócenie nazwy miasta o podanym kodzie pocztowym.

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); 
     } 
    } 
} 
Powiązane problemy