在做json反序列化时解析int
本文关键字:int json 反序列化 在做 | 更新日期: 2023-09-27 18:17:39
我正在编写一个自定义javascript转换器,我正在接收一个应该包含int的字符串。这就是我正在做的:
public class MyObjectToJson : JavaScriptConverter
{
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
MyObject TheObject = new MyObject;
if (serializer.ConvertToType<int>(dictionary["TheInt"]) == true)
{
MyObject.TheInt = serializer.ConvertToType<int>(dictionary["TheInt"]);
}
但是,它对条件语句不起作用。我需要改变什么?我想测试我得到的是int
谢谢。
修改代码以使用这个条件:
int value;
if (int.TryParse(serializer.ConvertToType<string>(dictionary["TheInt"]), out value)
{
MyObject.TheInt = value;
}
这是一个比依赖抛出异常更好的解决方案,因为捕获异常在计算上是昂贵的。
这是因为ConvertToType返回请求类型的对象。要使用它作为if
子句的条件,它必须返回bool
。
你可以这样做:
try {
MyObject.TheInt = serializer.ConvertToType<int>(dictionary["TheInt"]);
}
catch(Exception e)
{
throw new Exception("Could not convert value into int: " + dictionary["TheInt"]);
}
EDIT:前面我建议检查转换值是否为空相等,但意识到当类型不匹配时,方法更有可能抛出异常而不是返回null。
如果不能确定类型不能为整型,则使用整型。TryParse。
MyObject TheObject = new MyObject;
if (!int.TryParse(dictionary["TheInt"], out MyObject.TheInt))
{
// conversion to int failed
}