首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当来自CreateErrorResponse时,HttpResponseMessage.Content.ReadAsStringAsync不会反序列化JSON

当来自CreateErrorResponse时,HttpResponseMessage.Content.ReadAsStringAsync不会反序列化JSON
EN

Stack Overflow用户
提问于 2014-02-20 19:19:11
回答 2查看 23.9K关注 0票数 8

如果我从我的自托管webapi返回

代码语言:javascript
复制
Request.CreateResponse(HttpStatusCode.OK, "YAY");

一切都很好..所以我可以这样读:

代码语言:javascript
复制
var responseStr = await Client.Content.ReadAsAsync<string>();
and then make something like "MessageBox.Show(responseStr);

如果我回来了

代码语言:javascript
复制
Request.CreateErrorResponse(HttpStatusCode.NotFound, "something went wrong!");

我也是这样读出来的,甚至是这样读出来的(不管怎么读):

代码语言:javascript
复制
Client.Content.ReadAsStringAsync();

字符串未反序列化,在尝试解析/读取为字符串时出现错误。

如果我把它作为对象来读..很好..。但是我不能执行object.ToString();我得到了错误。

为什么?以及如何修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-25 23:08:06

我发现在返回的JSON中有额外的'\‘和'"’。

因此,在序列化回对象之前,我需要删除多余的字符。

例如:

代码语言:javascript
复制
string jsonString = httpResponseMessage.Content.ReadAsStringAsync()
                                               .Result
                                               .Replace("\\", "")
                                               .Trim(new char[1] { '"' });

List<VwAisItemMaster> vwAisItemMasterList = JsonConvert.DeserializeObject<List<VwAisItemMaster>>(jsonString);
票数 20
EN

Stack Overflow用户

发布于 2014-11-05 06:05:16

更好的解决方案是在webapi方法中创建响应时解决这个问题。注意CreateResponse方法中的类型。

代码语言:javascript
复制
IList<VwItemMaster> vwItemMasterList = this.itemMastersGetByUpc(unitOfWork, upc);

HttpResponseMessage httpResponseMessage = this.Request.CreateResponse<IList<VwItemMaster>>(HttpStatusCode.OK, vwItemMasterList);

httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21906161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档