2017-05-02 22 views
0

WebリクエストからJSONエンコードされた文字列を取得しています。予期しない文字のためJsonConvert.DeserializeObjectが失敗する

私は私がこれまで使っていたコードは、この

のように見えますJsonConvertからDeserializeObjectと私は

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

を得ることを解析しようとすると、文字列は、この

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

のように戻ってきます

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

明らかに、置換( "\"、 "")はトリックを行いません。私は本当にhavしたくありませんそれは私が必要とする文字列に変換するのは不正な方法なので、これを行うことです。どのように文字列の\を取り除くのですか?

+4

あなたは文字列が*本当に*にバックスラッシュを持っている、またはあなたが何で見ていることであることを確認していますデバッガ? –

+0

戻る文字列がこのようなものであることをどのように知っていますか? –

+0

これはVisual Studioのデバッガからのものです。 – inifus

答えて

1

文字列にはJSONオブジェクトが含まれており、それを文字列(...DeserializeObject<string>(stream))としてデシリアライズしようとしているため、例外です。 「JSON encoded string」が表示されない場合は、「JSON encoded オブジェクト」が表示されます。

あなたがresponseにしたいかを決める必要があります。

  • それはさらに処理するためにいくつかのJSONだ場合は、単にstreamresponseを設定します。
  • オブジェクト階層を含める必要がある場合は、必要なクラスを定義し、JsonConvert.DeserializeObject<RootClass>()を使用します。また、JsonConvert.DeserializeAnonymousType()の使用を検討することもできます。
  • それは"LINQ to JSON"はかなり役に立つことを証明する、そのJSON定義から抽出されたいくつかの値が含まれている必要がある場合:

    response = (string)JObject.Parse(stream)["key"]; 
    
関連する問題