繁体   English   中英

如何在Windows Phone中反序列化json字符串?

[英]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",
    }
  }
}

hjekeSecond一样,有很多键值对,如何使用Newtonsoft.json反序列化json

尝试了解上一个问题中的解决方案如何在Windows Phone中反序列化JSON数据?

该问题中的第一个JSON很好且易于使用。 JSON,其中字段名称是唯一的,不便于反序列化。 因此,使用代码生成器时,每个实例public class Hjeke遇到诸如public class Hjekepublic 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM