1

我刚刚得到了我的 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

4

5 回答 5

2

正如每个人都提到的那样,您的 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 库。

于 2013-11-05T13:33:31.050 回答
2

尝试在您之前的问题中了解我的解决方案 如何在 windows phone 中反序列化 json 数据?

您在该问题中的第一个 JSON 很好且易于使用。JSON,其中字段名称是唯一的,不便于反序列化。public class Hjeke因此,当您使用代码生成器时,您会遇到诸如public class Second每个实例的问题。

将 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 中,使用方便。

于 2013-11-05T11:04:37.300 回答
1

您的响应字符串有一些错误,它不是有效的 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 to C#

2 .将您的 Json 字符串放在那里并生成 C# 类对象

3 .现在在你的解决方案中创建这个类

4.现在反序列化如下

var DeserialisedObject = JsonConvert.DeserializeObject<Your Class>(YourJsonString);
于 2015-05-29T06:34:23.800 回答
0

你对json响应有什么影响吗?在这种情况下,详细信息可能应该是 JSONArray,而不是具有不同数量属性的对象,因为我认为这就是您的意思是这里的问题。

于 2013-11-05T10:33:36.917 回答
0

首先,创建类:

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);
于 2013-11-05T10:31:33.030 回答