DataContractJsonSerializer不反序列化html实体

时间:2011-03-01 07:22:15

标签: json windows-phone-7

我从Web服务接收数据,其中一些字符串中包含html实体,例如:

{"prop": "htmlentity - é"}

é未被解析为é。

我的问题有两个:

  1. 这是否应该发生?
    我尽可能地查看了JSON规范,但找不到任何对html实体的引用。
  2. 如果有正确的方法,使用DataContractJsonSerializer执行此操作的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以在包含HTML实体的字符串上调用HttpUtility.HtmlDecode

这不是DataContractJsonSerializer的工作,因为JSON规范只需要引号,反向solidus和要转义的控制字符。

答案 1 :(得分: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服务,则可以在服务器端验证这一点。如果没有,请咨询网络服务提供商。