我试图将api响应映射到自定义api类。 Api总是返回这些json字段:
Success (true/false)
Paginator (object)
Data (object)
好的,首先两个字段都没有问题,因为它们总是一样的。
但是数据是 - 取决于端点 - 是另一个类(User
,Group
等。)
对于所有这些端点,我有一个像user.cs等实体类。
如何将用户对象动态映射到上述ApiResponseClass
?
如果可能的话,我不想为每个端点制作ApiResponseClasses
。
很抱歉格式化,我在移动设备上。
答案 0 :(得分:4)
使用泛型创建一个类,并将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> {
}
然后可以在服务器上使用这样的端点
public ApiResponse<User> MyUserAction() { ... }
public ApiResponse<Group> MyGroupAction() { ... }
或甚至在反序列化json
时在客户端ApiResponse<User> response = JsonConvert.DeserializeObject<ApiResponse<User>>(json);
答案 1 :(得分:1)
public class ApiResponse<T>
{
public bool Success { get; set;}
public object Paginator { get; set;}
public T Data { get; set; }
}
public class User
{
public string Name {get;set;}
//Other properties
}
然后,根据您目前从Api中读取的内容,您使用<ApiResponse<User>>
,这意味着ApiReponse中的T Date设置为用户类型。
e.g。如果你正在使用HttpClient Type
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);
}
答案 2 :(得分:-1)
您可以使用泛型:
public class ApiResponse<T>
{
public bool IsSuccess { get; set; }
public object Paginator { get; set; }
public T Data { get; set; }
}
当API端点返回User
作为响应时,只需实例化ApiResponse
类:
var response = new ApiResponse<User>