在执行json反序列化时解析int

时间:2011-12-13 19:29:35

标签: c#

我正在编写一个自定义的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。

感谢。

3 个答案:

答案 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
  }