如何将从 api 传递的对象转换回该项目的 class?
How do I convert an object passed from an api back to that item's class?
在我的 api 中,我有一个 class,其中包含一些字段,其中包括一个对象类型。我将另一个 class 的对象插入该字段。然后我return整个class回程序调用api。在该程序中,我可以将整个结果转换为原来的 class,但我无法将对象字段转换回原来的 class。我错过了什么?
API
public class APIResponse
{
public int statusCode { get; set; }
public string errorMessage { get; set; }
public object returnObject { get; set; }
}
[HttpPost("CompleteCustomFilterOrder")]
[Produces("application/json", Type = typeof(APIResponse))]
public APIResponse GetItem
{
ItemDTO item = new ItemDTO();
item.ID = 12345
item.Name = "Widget";
item.Status = "Active";
APIResponse response = new APIResponse();
response.statusCode = 98765;
response.errorMessage = "Success!";
response.returnObject = item;
return response;
}
程序调用API
var client = new RestClient(url + "GetItem");
var request = new RestRequest(Method.GET);
var apiResponse = client.Execute<APIResponse>(request);
APIResponse response = apiResponse.Data;
ItemDTO item = (ItemDTO)response.returnObject;
响应正确转换回 class,但项目抛出错误
Unable to cast object of type 'System.Collections.Generic.Dictionary`2[System.String,System.Object]' to type 'ProjectName.BusinessLogicLayer.Classes.ItemDTO'.
两个程序中的 ItemDTO class 除了命名空间外是相同的。
您正在接收 JSON 对象作为响应,因此直接转换将不起作用。您需要使用例如反序列化此对象。来自 Newtonsoft.Json 的 JsonConvert。
顺便提一句。您是否考虑过将 APIResponse 设为通用 class ?
public class APIResponse<T> where T: class
{
public int statusCode { get; set; }
public string errorMessage { get; set; }
public T returnObject { get; set; }
}
在我的 api 中,我有一个 class,其中包含一些字段,其中包括一个对象类型。我将另一个 class 的对象插入该字段。然后我return整个class回程序调用api。在该程序中,我可以将整个结果转换为原来的 class,但我无法将对象字段转换回原来的 class。我错过了什么?
API
public class APIResponse
{
public int statusCode { get; set; }
public string errorMessage { get; set; }
public object returnObject { get; set; }
}
[HttpPost("CompleteCustomFilterOrder")]
[Produces("application/json", Type = typeof(APIResponse))]
public APIResponse GetItem
{
ItemDTO item = new ItemDTO();
item.ID = 12345
item.Name = "Widget";
item.Status = "Active";
APIResponse response = new APIResponse();
response.statusCode = 98765;
response.errorMessage = "Success!";
response.returnObject = item;
return response;
}
程序调用API
var client = new RestClient(url + "GetItem");
var request = new RestRequest(Method.GET);
var apiResponse = client.Execute<APIResponse>(request);
APIResponse response = apiResponse.Data;
ItemDTO item = (ItemDTO)response.returnObject;
响应正确转换回 class,但项目抛出错误
Unable to cast object of type 'System.Collections.Generic.Dictionary`2[System.String,System.Object]' to type 'ProjectName.BusinessLogicLayer.Classes.ItemDTO'.
两个程序中的 ItemDTO class 除了命名空间外是相同的。
您正在接收 JSON 对象作为响应,因此直接转换将不起作用。您需要使用例如反序列化此对象。来自 Newtonsoft.Json 的 JsonConvert。 顺便提一句。您是否考虑过将 APIResponse 设为通用 class ?
public class APIResponse<T> where T: class
{
public int statusCode { get; set; }
public string errorMessage { get; set; }
public T returnObject { get; set; }
}