ASP.NET Web API IQueryable <T>挑战

Jan*_*sen 4 asp.net-web-api

我想在我的控制器中使用以下模式:

API/{控制器}/{ID}/{收集}

示例: api/customers/123/addresses

但我想IQueryable Of T从相应的Get动作返回.我想要这样的东西(简化):

public IQueryable<????> GetCollection(int id, string collection)  
{  
    switch(collection)  
    {  
        case "addresses":  
            return _addresses.AsQueryable();  
            break;  
        case "orders":  
            return _orders.AsQueryable();  
            break;  
        default:  
            throw new Exception(NotSupported);  
    }  
}   
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?
推荐的方法是什么?

EBa*_*arr 6

@SLacks是正确的,您应该返回, IQueryable<object>或者IQueryable<someBaseType>如果可以的话.

您获得的错误是DataContract Serializer的一个功能.所以你有几个选择.

  1. 切换到支持您想要的备用xml serlializer.
  2. Swtitch到一种输出形式绕过问题的串行器(比如使用JSON.net的JSON)
  3. 教数据契约序列化程序如何使用的序列化对象

对于"教学"选项,您可以通过两种方式进行教学.

(A)利用该[KnownType(typeof(...))]属性.这是关于KnownType属性的帖子.这是为WCF,但应该让你开始.

(B)使用数据合同解析器.这篇文章应该让你入门.