由于意外字符,JsonConvert.DeserializeObject失败

时间:2017-05-02 14:21:16

标签: c# json.net

我从webrequest获取了一个JSON编码的字符串。

字符串像这样回来了

"{\"key\":\"value\"}"

当我尝试用JsonConvert中的DeserializeObject解析时,我得到了

Unexpected character encountered while parsing value: {. Path '', line 1, position 1.

到目前为止我使用的代码看起来像这样

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(address));
req.ContentType = "application/json; charset=utf-8";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
string response;
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
    string stream = sr.ReadToEnd().Replace("\n", "");
    stream = stream.Replace("\\", "");
    response = JsonConvert.DeserializeObject<string>(stream);
}

显然replace("\\", "")没有做到这一点,我真的不想这样做,因为它是一种将字符串转换为我需要的不洁方式。如何摆脱字符串中的\

1 个答案:

答案 0 :(得分:1)

stream字符串包含一个JSON对象,您尝试将其反序列化为字符串(...DeserializeObject< string >(stream)),因此异常。因此,您未获得&#34; JSON编码的字符串&#34;,您正在获取&#34; JSON编码的对象& #34;

您需要在response中确定您想要的内容:

  • 如果它有一些JSON可供进一步处理,只需将response设置为stream
  • 如果它应包含对象层次结构,请定义必要的类并使用JsonConvert.DeserializeObject<RootClass>()。或者,您可以考虑使用JsonConvert.DeserializeAnonymousType()
  • 如果它应该包含从该JSON定义中提取的某些值,"LINQ to JSON"可能会非常有用:

    response = (string)JObject.Parse(stream)["key"];