【发布时间】:2016-05-19 06:33:44
【问题描述】:
我正在使用 JavaScriptSerializer 类将 json 字符串转换为对象
如果我追加(10.),对于 int 值,'.'、'@' 等符号仍然得到正确的 json,实际上它不是有效的 json 文件。 我已经使用不同的方式检查了这个 json 字符串,但它并不是一直有效。
不明白它的行为。
整数只需要 '10'。
代码sn-p:
class Emp
{
public string firstName
{
get;set;
}
public string LastName
{
set;get;
}
public int Id
{
set;get;
}
}
var serializer = new JavaScriptSerializer();
Type t = typeof(Emp);
var returnType = serializer.Deserialize<Emp>("{'firstName': 'John','lastName':'Doe','id': 10.}");
【问题讨论】:
-
我不明白你在问什么。你能澄清一下吗?
-
"{'firstName': 'John','lastName':'Doe','id': 10.}" 这不是有效的 json ojbect,但仍在解析。
-
唯一无效的部分是单引号。我假设
JavaScriptSerializer会在知情的情况下接受这一点,并在可能的情况下仍对其进行解析。 -
是的,我可以理解,但这仍然不是 int(10.) 的有效输入。但是 JavaScriptSerializer 应该会抛出错误。
-
JSON 和 JavaScript 一样,不区分整数和其他非整数数字。它只知道数字,对他们来说
10.与10相同。所以反序列化器只看到“数字”(实际上它总是像一个双精度数),并检查它是否可以将它写入目标int属性。如果这有效(因为双精度恰好是一个整数),那很好。