问题描述
我有这个API,我想创建一个动态对象。我的意思是要处理普通对象而不是这个API返回给我的东西,我无法控制这个API所以检索到的数据不能被修改,这是主体,它代表数据库中的一个视图
此外,我认为在这种情况下,反思可以帮助我,任何想法......
请求正文:
{
"ViewName": "Person","ViewOutput": "Name,Email,Number","ViewFilter": [
{
"filterKey": "Number","filterValue": "532000000"
}
]
}
我希望对 ViewName + ViewOutput+ ViewFilter 进行参数化, ViewName 它将采用单个值, ViewOutput 将是字符串数组 ViewFilter 将是过滤列表(“FilterKey”、“FilterVlaue”),因为它可能是多个过滤值,如下所示:
"ViewFilter": [
{
"filterKey": "Number","filterValue": "532000000"
},{
"filterKey": "Email","filterValue": "test1@test.ps"
}
]
This is What API Return to me,Person Keys 和 Values 的列表,
回复:
{
"ResponseCode": "0","ResponseMessage": "Success","NumberOfRecords": "1","MainData": [
{
"recordData": [
{
"dataKey": "Name","dataValue": "Test Name"
},{
"dataKey": "Email","dataValue": "test@test.ps"
},{
"dataKey": "Number","dataValue": "532000000"
}
]
}
]
}
我想要的输出是这样的:
"Person": [
{
"Name":"Test","Email":"test@test.ps","Number":"532000000",}]
解决方法
使用 Paste JSON As Classes 功能将响应 JSON 粘贴到 Visual Studio 中的空类文件中,生成以下类:
public class Rootobject
{
public string ResponseCode { get; set; }
public string ResponseMessage { get; set; }
public string NumberOfRecords { get; set; }
public Maindata[] MainData { get; set; }
}
public class Maindata
{
public Recorddata[] recordData { get; set; }
}
public class Recorddata
{
public string dataKey { get; set; }
public string dataValue { get; set; }
}
您可以创建自己的 Person
类。
将 JSON 反序列化为生成的类后,获得 List<Person>
的一种方法是执行以下操作(请注意,这是未经测试的示例代码):
var people = rootObject.Maindata.Select(r =>
{
var name = r.recordData.Single(d => d.dataKey == "Name").dataValue;
var email = r.recordData.Single(d => d.dataKey == "Email").dataValue;
var number = r.recordData.Single(d => d.dataKey == "Number").dataValue;
return new Person(name,email,number);
}).ToList();