3

£ 記号を含む JSON 文字列を逆シリアル化しようとすると、例外が発生します。

タイプ RD.Details のオブジェクトのデシリアライズ中にエラーが発生しました。「�19.95 1 人あたり」に無効な UTF8 バイトが含まれています。

ログに記録する文字列は次のとおりです。

{
   "Promotions":[
      {
         "Name":"Traditional Afternoon Tea £19.95 Per Person",
         "PromotionId":20175,
         "Quantity":2
      }
   ]
}

これは私がデシリアライズする方法です:

var responseJsonSerializer = new DataContractJsonSerializer(typeof(TR));
Stream serializedStream;
string serializedString;
byte[] buffer;

using (WebResponse webResponse = webRequest.GetResponse())
{
    serializedStream = webResponse.GetResponseStream();

    using (StreamReader sr = new StreamReader(serializedStream))
    {
        serializedString = sr.ReadToEnd();
    }

    Report.Log("Message Response JSON Object: " + serializedString);

    buffer = Encoding.Default.GetBytes(serializedString);

    using (MemoryStream stream = new MemoryStream(buffer))
    {
        return responseJsonSerializer.ReadObject(stream) as TR;
    }
}

£ 記号が無効な utf8 と見なされる理由がわかりません。私が見る限り、それには何の問題もありません。

4

1 に答える 1

3

エンコーディング行を次のように変更するだけの簡単なことでした。

buffer = Encoding.UTF8.GetBytes(serializedString);
于 2014-06-06T10:07:39.987 に答える