C# 反序列化嵌套的JSON对象并对其进行预处理

C# 反序列化嵌套的JSON对象并对其进行预处理,c#,json,C#,Json,我试图做的是通过该对象反序列化json和foreach,并从中获取Name、Lastname和Id值。 我认为反序列化是可行的,但我如何才能通过该对象的值进行分析并写出结果呢 ResponseFromServer= responseFromServer"{\"ReportName\":\"TestReport\",\"Results\":[ { \"Name\":\"Test1\", \"Lastname\":\"Test2\", \"ID\":\"1111111111\",

我试图做的是通过该对象反序列化json和foreach,并从中获取Name、Lastname和Id值。 我认为反序列化是可行的,但我如何才能通过该对象的值进行分析并写出结果呢

ResponseFromServer=

responseFromServer"{\"ReportName\":\"TestReport\",\"Results\":[
{
   \"Name\":\"Test1\",
   \"Lastname\":\"Test2\",
   \"ID\":\"1111111111\",
},{
   \"Name\":\"Test\",
   \"Lastname\":\"Test\",
   \"Id\":\"222222222\"
}
]}" string
迄今为止的代码:

object jsonObj = new System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(responseFromServer);

var myObject = jsonObj.GetType().GetProperties();

foreach (var obj in myObject)
{
    Console.WriteLine(obj);
}

我将使用newtonsoft并创建一个具有列表属性的具体对象我将使用newtonsoft并创建一个具有列表属性的具体对象我建议您为JSON创建一个类,如下所示:

public class Result
{
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Id { get; set; }
}

public class ResponseClass
{
    public string ReportName { get; set; }
    public List<Result> Results { get; set; }
}
using System.Web.Script.Serialization;
===============

List<Person> persons = JavaScriptSerializer().Deserialize<List<Report>>(responseFromServer);

Foreach(Person p in persons)
{
   //stuff
}
公共类结果
{
公共字符串名称{get;set;}
公共字符串Lastname{get;set;}
公共字符串Id{get;set;}
}
公共类响应类
{
公共字符串ReportName{get;set;}
公共列表结果{get;set;}
}
使用这个类,您可以转换对象并在foreach中获取属性,比如Lastname

var yourObjectWithStructure = JsonConvert.DeserializeObject<ResponseClass>(responseFromServer,
            new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                });

 foreach (var result in objec.Results)
 {
     var id = result.Id;
     var lastName = result.Lastname;
     var name = result.Name;
 }
var yourObjectWithStructure=JsonConvert.DeserializeObject(responseFromServer,
新JsonSerializerSettings
{
NullValueHandling=NullValueHandling.Ignore
});
foreach(目标结果中的var结果)
{
var id=result.id;
var lastName=result.lastName;
var name=result.name;
}
更新:
JSON响应中有“ID”和“ID”。我建议,“ID”应该是“ID”。是吗?

我建议您为JSON创建一个类,如下所示:

public class Result
{
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Id { get; set; }
}

public class ResponseClass
{
    public string ReportName { get; set; }
    public List<Result> Results { get; set; }
}
using System.Web.Script.Serialization;
===============

List<Person> persons = JavaScriptSerializer().Deserialize<List<Report>>(responseFromServer);

Foreach(Person p in persons)
{
   //stuff
}
公共类结果
{
公共字符串名称{get;set;}
公共字符串Lastname{get;set;}
公共字符串Id{get;set;}
}
公共类响应类
{
公共字符串ReportName{get;set;}
公共列表结果{get;set;}
}
使用这个类,您可以转换对象并在foreach中获取属性,比如Lastname

var yourObjectWithStructure = JsonConvert.DeserializeObject<ResponseClass>(responseFromServer,
            new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                });

 foreach (var result in objec.Results)
 {
     var id = result.Id;
     var lastName = result.Lastname;
     var name = result.Name;
 }
var yourObjectWithStructure=JsonConvert.DeserializeObject(responseFromServer,
新JsonSerializerSettings
{
NullValueHandling=NullValueHandling.Ignore
});
foreach(目标结果中的var结果)
{
var id=result.id;
var lastName=result.lastName;
var name=result.name;
}
更新: JSON响应中有“ID”和“ID”。我建议,“ID”应该是“ID”。是吗?

如果下载框架:

然后您可以为您的响应创建一个类

public class Report
{
   public string ReportName {get; set;};
   public string TestReport {get; set;};
   public List<Person> Results {get; set;}
}
public class Person
{
   public string Name {get; set};
   public string LastName {get; set};
   public int ID {get; set;}
}
公共类报告
{
公共字符串ReportName{get;set;};
公共字符串TestReport{get;set;};
公共列表结果{get;set;}
}
公共阶层人士
{
公共字符串名称{get;set};
公共字符串LastName{get;set};
公共int ID{get;set;}
}
您可以直接反序列化到该对象类的列表中,如下所示:

public class Result
{
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Id { get; set; }
}

public class ResponseClass
{
    public string ReportName { get; set; }
    public List<Result> Results { get; set; }
}
using System.Web.Script.Serialization;
===============

List<Person> persons = JavaScriptSerializer().Deserialize<List<Report>>(responseFromServer);

Foreach(Person p in persons)
{
   //stuff
}
使用System.Web.Script.Serialization;
===============
List persons=JavaScriptSerializer()。反序列化(responseFromServer);
Foreach(个人中的p个人)
{
//东西
}
如果下载框架:

然后您可以为您的响应创建一个类

public class Report
{
   public string ReportName {get; set;};
   public string TestReport {get; set;};
   public List<Person> Results {get; set;}
}
public class Person
{
   public string Name {get; set};
   public string LastName {get; set};
   public int ID {get; set;}
}
公共类报告
{
公共字符串ReportName{get;set;};
公共字符串TestReport{get;set;};
公共列表结果{get;set;}
}
公共阶层人士
{
公共字符串名称{get;set};
公共字符串LastName{get;set};
公共int ID{get;set;}
}
您可以直接反序列化到该对象类的列表中,如下所示:

public class Result
{
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Id { get; set; }
}

public class ResponseClass
{
    public string ReportName { get; set; }
    public List<Result> Results { get; set; }
}
using System.Web.Script.Serialization;
===============

List<Person> persons = JavaScriptSerializer().Deserialize<List<Report>>(responseFromServer);

Foreach(Person p in persons)
{
   //stuff
}
使用System.Web.Script.Serialization;
===============
List persons=JavaScriptSerializer()。反序列化(responseFromServer);
Foreach(个人中的p个人)
{
//东西
}

我建议您使用强类型来描述预期的对象结构和动态特征。我没有使用MS serialiser,但是JSON.NET完全能够支持我提到的两个选项。我建议您使用强类型来描述预期的对象结构和动态特性。我没有与MS serialiser合作过,但JSON.NET完全能够支持我提到的两个选项。您的答案中缺少ReportName。谢谢,在我点击post时发现了这一点……现在修复:)我认为这与我的答案类似,但没关系。;)
JavaScriptSerializer
不是Json.Net的一部分;它内置在.NET framework中(这就是名称空间以
System.Web
开头的原因)。如果您想使用Json.Net,那么应该调用
JsonConvert.DeserializeObject
。它位于
Newtonsoft.Json
名称空间中。您的答案中缺少ReportName。谢谢,在我点击post时发现了这一点……现在修复:)我想它与我的答案类似,但没关系。;)
JavaScriptSerializer
不是Json.Net的一部分;它内置在.NET framework中(这就是名称空间以
System.Web
开头的原因)。如果您想使用Json.Net,那么应该调用
JsonConvert.DeserializeObject
。它位于
Newtonsoft.Json
名称空间中。@user2809327我可以回答您的问题吗?如果,你能用向下投票按钮下的钩子将此标记为已接受吗。对于stack overflow的用户来说,看到您的问题得到了回答是很有帮助的。也许你可以这样说:@user2809327我能回答你的问题吗?如果,你能用向下投票按钮下的钩子将此标记为已接受吗。对于stack overflow的用户来说,看到您的问题得到了回答是很有帮助的。也许你可以这样做: