2017-02-10 44 views
-2

我試圖將api響應映射到自定義api類。 Api總是返回這些json字段:具有通用屬性的C#類

Success (true/false) 
Paginator (object) 
Data (object) 

好的,首先兩個字段都沒有問題,因爲它們總是相同的。 但數據 - 根據端點 - 一個其它的類(UserGroup等)

對於所有這些端點的,我有這樣user.cs等

實體類我怎樣才能動態將用戶對象映射到上述的ApiResponseClass

如果可能,我不想爲每個端點製作ApiResponseClasses

對不起格式,我在手機上。

+2

請嘗試給我們提供一些代碼 – r1verside

+1

更具體地說,試着給一個[MCVE]。你有沒有嘗試爲所有這些對象做一個基類?你在使用哪個序列化程序?現在,這個問題要麼太寬泛,要麼不明確。 –

回答

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 
} 
時,可以使用這樣的服務器上

然後取決於g關於你如何從Api中讀取你將使用的<ApiResponse<User>>,這意味着ApiReponse中的T Date設置爲User類型。

例如如果你使用的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); 
} 
+0

非常感謝。像魅力一樣工作。泛型對我來說是新的。 – MikeRoss

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

您可以使用泛型:

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>