Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有泛型属性的C#类_C#_Json_Generics - Fatal编程技术网

具有泛型属性的C#类

具有泛型属性的C#类,c#,json,generics,C#,Json,Generics,我正在尝试将api响应映射到自定义api类。Api始终返回以下json字段: Success (true/false) Paginator (object) Data (object) 好的,首先两个字段都没有问题,因为它们总是相同的。 但根据端点的不同,数据属于另一类(用户,组等) 对于所有这些端点,我有一个实体类,如user.cs等 如何将用户对象动态映射到上述apiresseclass 如果可能的话,我不想对每个端点进行apiresseclasses 抱歉格式化,我在移动电话上 使用泛

我正在尝试将api响应映射到自定义api类。Api始终返回以下json字段:

Success (true/false)
Paginator (object)
Data (object) 
好的,首先两个字段都没有问题,因为它们总是相同的。 但根据端点的不同,数据属于另一类(
用户
等)

对于所有这些端点,我有一个实体类,如user.cs等

如何将用户对象动态映射到上述
apiresseclass

如果可能的话,我不想对每个端点进行
apiresseclasses


抱歉格式化,我在移动电话上

使用泛型创建一个类,并将
Data
属性设置为泛型参数

比如说

public class ApiResponse<TData> {
    public bool Success  { get; set; }
    public object Paginator { get; set; }
    public TData Data  { get; set; }
}

public class ApiResponse: ApiResponse<object> {
}
公共类响应{
公共bool成功{get;set;}
公共对象分页器{get;set;}
公共TData数据{get;set;}
}
公共类ApiResponse:ApiResponse{
}
然后可以在服务器上这样的端点中使用

public ApiResponse<User> MyUserAction() { ... }

public ApiResponse<Group> MyGroupAction() { ... }
public ApiResponse MyUserAction(){…}
公共ApiResponse MyGroupAction(){…}
甚至在反序列化json时在客户端

ApiResponse<User> response = JsonConvert.DeserializeObject<ApiResponse<User>>(json);
ApiResponse response=JsonConvert.DeserializeObject(json);
公共类API响应
{
公共bool成功{get;set;}
公共对象分页器{get;set;}
公共T数据{get;set;}
}
公共类用户
{
公共字符串名称{get;set;}
//其他属性
}
然后根据您当前从Api读取的方式,您将使用
,这意味着ApiReponse中的T Date设置为用户类型

e、 g.如果您使用的是HttpClient类型

using (var client = new HttpClient())
{
    var response = await client.GetAsync("http://yoururl.com")
    var jsonString = await task.Content.ReadAsStringAsync();
    var model = JsonConvert.DeserializeObject<ApiResponse<User>>(jsonString);
}
使用(var-client=new-HttpClient())
{
var response=wait client.GetAsync(“http://yoururl.com")
var jsonString=await task.Content.ReadAsStringAsync();
var model=JsonConvert.DeserializeObject(jsonString);
}
您可以使用泛型:

public class ApiResponse<T>
{
    public bool IsSuccess { get; set; }
    public object Paginator { get; set; }
    public T Data { get; set; }
}

请尝试向我们提供一些代码。更具体地说,请尝试给出一个。您是否尝试过为所有这些对象创建基类?您正在使用哪个序列化程序?照目前的情况,这个问题要么太宽泛,要么不清楚。非常感谢。工作得很有魅力。仿制药对我来说是新的。
public class ApiResponse<T>
{
    public bool IsSuccess { get; set; }
    public object Paginator { get; set; }
    public T Data { get; set; }
}
var response = new ApiResponse<User>