Как проанализировать мою строку json в С# (4.0) с помощью пакета Newtonsoft.Json?
Я новичок в JSON. В моем приложении asp.net я хочу разобрать json-строку. Так, я использовал пакет Newtonsoft.Json для чтения и записи json-данных. Теперь я могу разбирать простые json-данные. Но теперь я получил некоторые сложные 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': ''
}
]
}
}
]
}
}
]
}
Это мой код С#:
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. Теперь нужно разбирать объекты массива data.QUIZ.QPROP.QUESTION.QUEPROP... также
Но я не смог полностью разобрать...
Пожалуйста, помогите мне выйти из этой проблемы...
Ответы
Ответ 1
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>");
}
}
}
Ответ 2
Вы можете использовать этот инструмент для создания соответствующих классов С#:
http://jsonclassgenerator.codeplex.com/
и когда у вас будут созданы классы, вы можете просто преобразовать строку в объект:
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
Просто исправьте пространства имен.
Ответ 3
Вы можете создать свой собственный класс типа Quiz и затем десериализоваться с сильным типом:
Пример:
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
Ответ 4
Это простой пример анализа JSON, взяв пример API карты google. Это вернет название города для заданного почтового индекса.
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);
}
}
}