[英]How to deserialize json string in windows phone?
我刚得到一个字符串作为json响应。我的json在下面给出,
"code": 0,
"message": "success",
"students": {
"details":{
"hjeke": {
"id": "257633000000070001",
"name": "hjeke",
"percentage": 36,
"type": "Good",
},
"Second": {
"id": "257633000000073001",
"name": "Second",
"percentage": 4,
"type": "bad",
}
}
}
像hjeke和Second一样,有很多键值对,如何使用Newtonsoft.json反序列化json
尝试了解上一个问题中的解决方案如何在Windows Phone中反序列化JSON数据?
该问题中的第一个JSON很好且易于使用。 JSON,其中字段名称是唯一的,不便于反序列化。 因此,使用代码生成器时,每个实例public class Hjeke
遇到诸如public class Hjeke
和public class Second
public class Hjeke
问题。
对学生列表使用JSON结构:
"code": 0,
"message": "success",
"students": [
{
"id": "257633000000070001",
"name": "hjeke",
"percentage": 36,
"type": "Good",
},
{
"id": "257633000000073001",
"name": "Second",
"percentage": 4,
"type": "bad",
}]
是良好且灵活的结构。 使用此方法,您无需解析不明显的字段,例如
"details":{
"hjeke": {
等等。
根据我先前的回答,并使用课程与他们合作。 主要思想-您需要对象列表。 public List<StudentDetails> students
。 然后,所有students
对象都在List中反序列化,这很容易使用。
正如每个人都提到的那样,您的json似乎非常不灵活,是吧。
您可以提取您感兴趣的数据。
这是您的模型:
public class StudentDetails
{
public string id { get; set; }
public string name { get; set; }
public int percentage { get; set; }
public string type { get; set; }
}
这就是您可以提取它的方式:
var jsonObj = JObject.Parse(str);
// get JSON result objects into a list
var results = jsonObj["students"]["details"].Children().Values();
// serialize JSON results into .NET objects
var details = new List<StudentDetails>();
foreach (JToken result in results)
{
var st = result.ToString();
var searchResult = JsonConvert.DeserializeObject<StudentDetails>(st);
details.Add(searchResult);
}
我在这里使用newtonsoft.json库。
您的Response字符串有一些错误,不是有效的json
只需做一些小的修改即可,如下所示:
{
"code": 0,
"message": "success",
"students": {
"details": {
"hjeke": {
"id": "257633000000070001",
"name": "hjeke",
"percentage": 36,
"type": "Good"
},
"Second": {
"id": "257633000000073001",
"name": "Second",
"percentage": 4,
"type": "bad"
}
}
}
}
你可以找出差异
现在,请按照下列步骤操作:
1。转到此链接Json到C#
2。将您的Json字符串放在那里并生成C#类对象
3。现在在您的解决方案中创建此类
4。现在反序列化如下
var DeserialisedObject = JsonConvert.DeserializeObject<Your Class>(YourJsonString);
首先,创建类:
public class Hjeke
{
public string id { get; set; }
public string name { get; set; }
public int percentage { get; set; }
public string type { get; set; }
}
public class Second
{
public string id { get; set; }
public string name { get; set; }
public int percentage { get; set; }
public string type { get; set; }
}
public class Details
{
public List<Hjeke> hjeke { get; set; }
public List<Second> Second { get; set; }
}
public class Students
{
public List<Details> details { get; set; }
}
public class RootObject
{
public int code { get; set; }
public string message { get; set; }
public List<Students> students { get; set; }
}
之后,使用JSON.NET反序列化:
var deserialized = JsonConvert.DeserializeObject<Class1>(YourStringHere);
您对json响应有影响吗? 在这种情况下,细节可能应该是JSONArray,而不是具有变化数量的属性的对象,因为我认为这就是您要解决的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.