2011-03-01 85 views
2

我從Web服務接收數據,而某些字符串有HTML實體它們,例如:DataContractJsonSerializer不反序列化HTML實體

{"prop": "htmlentity - é"} 

é沒有被解析到E。

我的問題是雙重的:

  1. 這甚至應該發生的?
    我查看了JSON規範,盡我所能,但無法找到任何對html實體的引用。
  2. DataContractJsonSerializer做這件事的正確方法是什麼?,如果有正確的方法?

回答

1

您可以在包含HTML實體的字符串上調用HttpUtility.HtmlDecode

這不是DataContractJsonSerializer的工作,因爲JSON規範只需要引號,反向固體角和要轉義的控制字符。

0

這不是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服務提供商聯繫。

相關問題