在做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

谢谢。

在做json反序列化时解析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
  }