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

时间:2014-02-20 11:19:11

标签: c# json

如果我从自我主题的webapi返回

Request.CreateResponse(HttpStatusCode.OK, "YAY");

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

var responseStr = await Client.Content.ReadAsAsync<string>();
and then make something like "MessageBox.Show(responseStr);

如果我回来

Request.CreateErrorResponse(HttpStatusCode.NotFound, "something went wrong!");

我用同样的方式读出来,甚至用(无关紧要):

Client.Content.ReadAsStringAsync();

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

如果我把它作为对象阅读..它很好......但是我无法执行object.ToString(); 我收到错误..

为什么呢?以及如何解决它?

2 个答案:

答案 0 :(得分:11)

我发现有额外的&#39; \&#39;和&#39;&#39;&#39;在返回的JSON中。
所以在我序列化回一个对象之前,我需要删除额外的字符。

e.g。

string jsonString = httpResponseMessage.Content.ReadAsStringAsync()
                                               .Result
                                               .Replace("\\", "")
                                               .Trim(new char[1] { '"' });

List<VwAisItemMaster> vwAisItemMasterList = JsonConvert.DeserializeObject<List<VwAisItemMaster>>(jsonString);

答案 1 :(得分:0)

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

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");