【问题标题】:Returning an Interface from MVC Web API从 MVC Web API 返回接口
【发布时间】:2014-12-11 07:50:37
【问题描述】:

我有以下两个类

public interface INotification
{    
    int Id { get; set; }
    bool IsNotificationShown { get; set; }
    DateTime NotificationDate { get; set; }
}

public class Notification : INotification
{

    public int Id
    {
        get;
        set;
    }

    public bool IsNotificationShown
    {
        get;
        set;
    }


    public DateTime NotificationDate
    {
        get;
        set;
    }

}

WebAPI 控制器具有以下操作,我已硬编码值以便于阅读

    public List<INotification> Get()
    {
        INotification notif = new Notification { Id = 1, IsNotificationShown = false, NotificationDate = DateTime.Now, NotificationDescription = "Desc", NotificationFrom = "Abcd", NotificationTo = "Abcd", NotificationTypeId = 1 } ;
        return new List<INotification> { notif };
    }

当我在浏览器上运行时,我收到以下错误

“ObjectContent`1”类型未能序列化内容类型“application/xml;”的响应正文; charset=utf-8'。

只要我将返回类型从 INotification 更改为 Notification,它就可以正常工作。有人对如何解决此问题有任何建议吗?

【问题讨论】:

  • 你不能序列化一个接口——没有什么可以序列化的。
  • 所以我必须返回一个具体的类型,框架不能解决吗?使用界面的全部目的已经不复存在了。
  • 您必须将接口转换为具体类型。接口不包含数据,因此无需通过网络进行序列化。接口定义了实现类必须实现的属性/方法,但实际实现(和数据)取决于具体实例。

标签: asp.net-web-api


【解决方案1】:

只需将属性KnowType 添加到您的班级。像这样:

[KnownType(typeof(Notification))]
public class Notification : INotification
{
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多