Web Api返回自定义服务结果

时间:2015-03-30 00:53:50

标签: c# asp.net-web-api asp.net-web-api2 asp.net-mvc-5.2

我有正常的WebApi控制器,方法是:

public class ModelController : ApiController
{
    public IEnumerable<Model> Get()
    {
        return service.Get();
    }

    public string Get(int id)
    {
        return service.Get(id);
    }

    public void Post([FromBody]MyViewModel value)
    {
        return service.Save(value);
    }

    public void Put(int id, [FromBody]MyViewModel value)
    {
        return service.Save(value);
    }

    public void Delete(int id)
    {
        return service.Delete(value);
    }
}

我想将返回结果包装到自定义对象ServiceResult

public class ServiceResult<T>
{
    public bool IsError{ get; set; }
    public T ObjectModel {get; set}
}

我想将所有控制器方法的返回类型更改为ServiceResult 这是一个例子:

public ServiceResult Post([FromBody]MyViewModel value)
{
    service.Save(value);
    //getting error here:
    return new ServiceResult() { IsError= true, ObjectModel = value };
}

但是得到了错误

  

&#39; ObjectContent`1&#39;类型无法序列化响应正文   内容类型&#39; application / xml;字符集= UTF-8&#39;

     

键入&#39; Models.View.MyViewModel&#39;同   数据合同名称   &#39; MyViewModel://schemas.datacontract.org/2004/07/MyViewModel'   不是预期的。考虑使用DataContractResolver或添加任何   静态地知道已知类型列表的类型 - 例如,   通过使用KnownTypeAttribute属性或将它们添加到   传递给DataContractSerializer的已知类型列表。   

你知道我该如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您的ServiceResult对象需要一个类型参数,试试这个

return new ServiceResult<MyViewModel>() { IsError= true, ObjectModel = value };