asp.net web api无法发送对象

时间:2013-01-01 19:55:24

标签: asp.net-mvc-4 asp.net-web-api

我刚刚转而使用新的web api for MVC 4,而且我很难将我的webservice的响应反序列化。

这是我的服务器代码:

IEnumerable<Fish> myList = GetFish();

return Request.CreateResponse(HttpStatusCode.OK, myList,"application/xml");

这被序列化为:

<ArrayOfFish xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MySolution.NameSpace.Resources\" />

由于没有返回任何结果。

当我尝试使用XmlMediaTypeFormatter解析它时,我收到一条错误消息,说它没有预料到它会得到什么。

我开始使用web api时,我的反序列化代码没有改变,只是:

return content.ReadAsAsync<T>(formatters).Result;

格式化程序是List格式化程序,仅包含XmlMediaTypeFormatter

T是Fish

的通用列表

如果我省略了"application/xml"类型,那么它似乎在JSon中发送(因为结果是[])但是客户端需要xml,并且由于某种原因不会在它上面使用JSon序列化器,即使我明确将类型设为text/json

将对象反序列化应该相当简单,因为它正是我之前所做的,我只是稍微改变了我的服务器以使用CreateResponse来制作HttpResponseMessage而不是使用{{1直接,因为不再支持通用版本。我无法在网上找到一个客户/服务器示例,其中有人将结果解码为令人沮丧的对象。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

XmlSerializer无法序列化接口(IEnumerable)。在返回之前转换为List。

return Request.CreateResponse(HttpStatusCode.OK, myList.ToList(),"application/xml");

带有引用的simlar问题 - XmlSerializer won't serialize IEnumerable

答案 1 :(得分:0)

我最终发现web api使用的序列化方法与前一种标准方式略有不同。我将此添加到我的global.asax并解决了问题:

GlobalConfiguration.Configuration.Formatters.Insert(0, new XmlMediaTypeFormatter() { UseXmlSerializer = true });