我正在编写一个自定义的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。
感谢。
答案 0 :(得分:3)
更改您的代码以使用此条件:
int value;
if (int.TryParse(serializer.ConvertToType<string>(dictionary["TheInt"]), out value)
{
MyObject.TheInt = value;
}
这是一个比依赖抛出异常更好的解决方案,因为捕获异常在计算上非常昂贵。
答案 1 :(得分:2)
这是因为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"]);
}
编辑:之前我曾提议检查转换后的值是否存在等值,但是意识到该方法更有可能抛出异常,而不是在类型不匹配时返回null。
答案 2 :(得分:0)
如果您不确定该类型不能是int,请改用int.TryParse。
MyObject TheObject = new MyObject;
if (!int.TryParse(dictionary["TheInt"], out MyObject.TheInt))
{
// conversion to int failed
}