4

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

例如这段代码:

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

JavaScriptSerializer js = new JavaScriptSerializer();

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

将抛出 ArgumentException,表明可能正确的 JSON 不允许属性名称为空字符串。只需浏览Crockford网站上的Backaus Naur 表单图/语法图,就可以看出允许使用空字符串。

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

1 回答 1

4

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

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

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

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

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

于 2012-05-11T20:40:56.187 回答