【问题标题】:This seems like a bug in .NET's JavaScript deserialize... is it?这似乎是 .NET 的 JavaScript 反序列化中的一个错误……是吗?
【发布时间】:2012-05-11 20:34:32
【问题描述】:

基本上,我发现作为 JavaScript 对象(关联数组)的 JSON 字符串,其属性/键之一为空字符串会导致内置 .NET 序列化程序引发异常。

例如这段代码:

string json = "{ \"\" : [\"b\"] }";

JavaScriptSerializer js = new JavaScriptSerializer();

var map = js.Deserialize<Dictionary<string, List<string>>>(json);

将抛出 ArgumentException,表明可能正确的 JSON 不允许属性名称为空字符串。只需浏览Crockford’s 网站上的Backaus Naur Form Diagram / Syntax Diagram 即可表明允许使用空字符串。

object => '{'  string ':' value '}'
string => ""
       => " chars "

【问题讨论】:

  • 几周前我将代码切换到 JSON.NET,发现它好多了。如果可以选择的话,也许值得一试。

标签: .net json serialization javascriptserializer


【解决方案1】:

是的。这对我来说肯定是个错误。这绝对是有效的:

var x = {"" : ["b"]}
alert(x[""]); 

我不是说你应该这样做,但你可以在 JS 中这样做。

编辑话虽如此。你的代码对我有用。您使用的是哪个版本的 .NET?

编辑已确认。它在 .NET 3.5 中中断,但在 4.0 中有效。

【讨论】:

  • 我用的是v3.5...你用的是4.0/4.5吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
相关资源
最近更新 更多