C# 如何在windows phone中反序列化json字符串?

C# 如何在windows phone中反序列化json字符串?,c#,json,windows-phone-7,C#,Json,Windows Phone 7,我刚刚得到一个字符串形式的json响应。我的json如下所示 "code": 0, "message": "success", "students": { "details":{ "hjeke": { "id": "257633000000070001", "name": "hjeke", "percentage": 36, "type": "Good", }, "Second": {

我刚刚得到一个字符串形式的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

首先,创建类:

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; }
}
public-class-Hjeke
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共整数百分比{get;set;}
公共字符串类型{get;set;}
}
公共二等舱
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共整数百分比{get;set;}
公共字符串类型{get;set;}
}
公开课详情
{
公共列表hjeke{get;set;}
第二个公共列表{get;set;}
}
公立班学生
{
公共列表详细信息{get;set;}
}
公共类根对象
{
公共整数代码{get;set;}
公共字符串消息{get;set;}
公共列表学生{get;set;}
}
之后,使用JSON.NET反序列化:

var deserialized = JsonConvert.DeserializeObject<Class1>(YourStringHere);
var deserialized=JsonConvert.DeserializeObject(YourStringHere);

首先,创建类:

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; }
}
public-class-Hjeke
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共整数百分比{get;set;}
公共字符串类型{get;set;}
}
公共二等舱
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共整数百分比{get;set;}
公共字符串类型{get;set;}
}
公开课详情
{
公共列表hjeke{get;set;}
第二个公共列表{get;set;}
}
公立班学生
{
公共列表详细信息{get;set;}
}
公共类根对象
{
公共整数代码{get;set;}
公共字符串消息{get;set;}
公共列表学生{get;set;}
}
之后,使用JSON.NET反序列化:

var deserialized = JsonConvert.DeserializeObject<Class1>(YourStringHere);
var deserialized=JsonConvert.DeserializeObject(YourStringHere);

您对json响应有任何影响吗?在本例中,详细信息可能是一个JSONArray,而不是一个具有不同数量属性的对象,因为我假设这就是您的意思,这就是问题所在。

您对json响应有任何影响吗?在本例中,详细信息可能是一个JSONArray,而不是一个具有不同数量属性的对象,因为我假设这就是您的意思,这就是这里的问题所在。

试着理解我在前面问题中的解决方案

在这个问题上,您的第一个JSON非常好用。 JSON,其中字段名是唯一的,不便于反序列化。因此,在使用代码生成器时,每个实例都会遇到问题,例如
公共类Hjeke
公共类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": {
等等


根据我之前的回答,使用类与他们一起工作。主要思想-您需要对象列表<代码>公开学生名单。然后,所有
学生
对象在列表中反序列化,这很容易使用。

试着理解我在上一个问题中的解决方案

在这个问题上,您的第一个JSON非常好用。 JSON,其中字段名是唯一的,不便于反序列化。因此,在使用代码生成器时,每个实例都会遇到问题,例如
公共类Hjeke
公共类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": {
等等


根据我之前的回答,使用类与他们一起工作。主要思想-您需要对象列表<代码>公开学生名单。然后,所有
学生
对象在列表中反序列化,这很容易使用。

正如大家提到的,您的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);
        }
var jsonObj=JObject.Parse(str); //将JSON结果对象放入列表中 var results=jsonObj[“学生”][“详细信息”].Children().Values(); //将JSON结果序列化为.NET对象 var details=新列表(); foreach(JToken result in results) { var st=result.ToString(); var searchResult=JsonConvert.DeserializeObject(st); 添加(搜索结果); }
我在这里使用的是newtonsoft.json库。

大家都提到过,你的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);
        }
var jsonObj=JObject.Parse(str); //将JSON结果对象放入列表中 var results=jsonObj[“学生”][“详细信息”].Children().Values(); //将JSON结果序列化为.NET对象 var details=新列表(); foreach(JToken result in results) { var st=result.ToString(); var searchResult=JsonConvert.DeserializeObject(st); 添加(搜索结果); }
我在这里使用的是newtonsoft.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"
            }
        }
    }
}
你可以看出区别

现在按照以下步骤操作:

1。转到此链接

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

3。现在在解决方案中创建此类

4。现在反序列化如下

var DeserialisedObject = JsonConvert.DeserializeObject<Your Class>(YourJsonString);
var DeserialisedObject=JsonConvert.DeserializeObject(YourJsonString);

您的响应字符串有一些错误,它不是有效的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。转到此li