我從Web服務接收數據,而某些字符串有HTML實體它們,例如:DataContractJsonSerializer不反序列化HTML實體
{"prop": "htmlentity - é"}
的é
沒有被解析到E。
我的問題是雙重的:
- 這甚至應該發生的?
我查看了JSON規範,盡我所能,但無法找到任何對html實體的引用。 - 用
DataContractJsonSerializer
做這件事的正確方法是什麼?,如果有正確的方法?
我從Web服務接收數據,而某些字符串有HTML實體它們,例如:DataContractJsonSerializer不反序列化HTML實體
{"prop": "htmlentity - é"}
的é
沒有被解析到E。
我的問題是雙重的:
DataContractJsonSerializer
做這件事的正確方法是什麼?,如果有正確的方法?您可以在包含HTML實體的字符串上調用HttpUtility.HtmlDecode。
這不是DataContractJsonSerializer的工作,因爲JSON規範只需要引號,反向固體角和要轉義的控制字符。
這不是JSON序列化問題,這是因爲數據是通過網絡發送的。
序列化不會自動編碼HTML實體。
請參閱:
var orig = new MyObj {prop = "htmlentity - é"};
var ser = new DataContractJsonSerializer(typeof(MyObj));
var ms = new MemoryStream();
ser.WriteObject(ms, orig);
var serialized = Encoding.UTF8.GetString(ms.GetBuffer(), 0, (int)ms.Length);
MessageBox.Show(serialized); // {"prop":"htmlentity - é"}
如果你有Web服務的控制,那麼你可以在服務器端驗證這一點。如果不是,請與Web服務提供商聯繫。