如何将从api传递的对象转换回该项目的类?

时间:2018-08-07 20:44:36

标签: c# rest api casting api-design

在我的api中,我有一个包含一些字段的类,其中包括类型对象。我将另一个类的对象插入该字段。然后,我将整个类返回给调用api的程序。在该程序中,我可以将整个结果转换为原来的类,但是不能将object字段转换回它的原始类。我想念什么?

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;

响应正确地转换回一个类,但是项引发错误

  

无法转换类型为“ System.Collections.Generic.Dictionary`2 [System.String,System.Object]”的对象来键入“ ProjectName.BusinessLogicLayer.Classes.ItemDTO”。

除了命名空间外,两个程序中的ItemDTO类均相同。

1 个答案:

答案 0 :(得分:1)

您正在接收JSON对象作为响应,因此直接强制转换将不起作用。您需要使用例如反序列化此对象。来自Newtonsoft.Json的JsonConvert。 顺便说一句。您是否考虑过将APIResponse设置为通用类?

public class APIResponse<T> where T: class
{
    public int statusCode { get; set; }
    public string errorMessage { get; set; }
    public T returnObject { get; set; }
}