2012-03-13 26 views
2

我利用新的MVC4 ApiController构建了一个搜索界面;是这样的:MVC 4中集合与单值之间内容协商的差异?

public IEnumerable<RecordSummaryType> Get(...) 
{ 
    var list = MyService.GiveMeTheList(...); 
    return list; 
} 

public SingleRecordDetailType Get(long id) 
{ 
    var result = MyService.GiveMeASingleValue(id); 
    return result; 
} 

出于某种原因,在这种情况下,IEnumerable的通话荣誉内容协商 - 即,当我通过应用程序/ XML的请求,接受报头,它返回的XML,当我通过应用程序/ JSON它返回JSON - ,但SingleRecordType调用仅返回JSON,即使您要求XML。

所以我的问题是 - MVC 4处理单一值类型的集合的方式有差异吗?或者,更可能的是,在MVC有钩,其中一个可能会无意中禁用内容协商一定的呼叫?

回答

3

这取决于是否SingleRecordDetailType可以通过XmlSerializer的序列化。 XmlSerializer是ASP.NET Web API中的默认XML格式化程序,请参阅here以了解有关其限制的更多信息。

如果网络API无法序列与请求的格式将使用第一格式中能够序列化响应的列表响应(大部分时间这是JSON格式)。

作为解决方案,您可以将yoru类修改为可由XmlSerializer序列化,或者通过将UseDataContractSerialzier属性设置为true来重新配置XML格式化程序以使用数据协定序列化程序。

+0

这肯定是它 - 我错过了对象层次一些'IList's,但提供正确的执行类型进行XmlSerializer的快乐。这种行为完全是有道理的,只是不知道这是它是如何处理的。谢谢! – 2012-03-13 16:32:23