我正在使用JavaScriptSerializer类将json字符串转换为对象
如果我追加(10。),对于int值,符号如'。',' @'等等仍然得到正确的json,实际上它是无效的json文件。 我用不同的方式检查这个json字符串,但它一直无效。
不了解其行为。
只需要' 10'对于整数。
代码段:
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.}");
答案 0 :(得分:1)
这里有两件事情可以发挥作用:
该JSON的唯一无效部分是其引号。 实际上只允许用双引号引用字符串,所以$scope.severity_lists = function(){
console.log('Stage1: Loading Sods..... ');
$http.get('{% url "severities" %}').success(
function(data){
$scope.severity_list = data['objects'];
}).error(function(data, status){
console.log('Stage1: Internal error while loading initial data:'+status );
});
};
$scope.severity_lists();
支持反序列化单引号可能有点奇怪。
这是支持多种替代格式的慎重选择。 JSON实际上甚至支持省略属性名称的引号,因此以下内容也是有效的(考虑到它也是一个有效的JavaScript表达式,这是有意义的):
JavaScriptSerializer
您提到的另一部分是{ firstName: 'John', lastName: 'Doe', id: 10. }
数字,它不是整数但是反序列化 整数。这是因为类似JSON的JavaScript只知道数字。整数和非整数之间没有区别;只有一个数字类型是underlying deserializer,就像.NET的双重。
因此,在反序列化时,不能考虑基类型,因为它总是双倍的。但是IEEE-754 floating point number实际上确实试图从实际的字符串表示中获取一些信息。因此值10.
将返回一个整数,而值10
将返回一个小数。
但是,当使用该信息并且underlying deserializer放宽限制时,以及applied to the target type将小数转换为int - 因为小数10.
适合int
答案 1 :(得分:0)
首先,有效的JSON有双引号,因此输入应该如下:
var returnType2 = serializer.Deserialize<Emp>(@"{""firstName"": ""John"",""lastName"":""Doe"",""id"": 10}");
关于验证部分,请查看MSDN JavaScriptSerializer Class文档。您可以看到所有原始数字(或数字兼容)类型(如字节,Ints,uInts等)等同于JSON Number。虽然Number(根据JSON模式)是Javascript中的双精度浮点格式,因此"id":10.
完全有效,JavaScriptSerializer
必须能够处理它。
答案 2 :(得分:0)
Json对象格式不正确。字符串格式外部的简单引号,并在对象内部加倍。阅读http://www.w3schools.com/json/ 你可以在这里验证 https://jsonformatter.curiousconcept.com