在C#中转换vs指定类型

时间:2012-04-28 00:03:40

标签: c# json

我一直在寻找解析JSON字符串的方法,而且我遇到过这两种方法。

class Test {

      String test; 

      String getTest() { return test; }
      String setTest(String test) { test = test; }

  }

var ser = new JavaScriptSerializer();
Test abc = (Test)ser.DeserializeObject("{ \"test\":\"some data\" }");

var ser = new JavaScriptSerializer();
Test abc = ser.Deserialize<Test>("{ \"test\":\"some data\" }");

第一个是将对象转换为类型,第二个是指定类型?他们之间有什么真正的区别一种方法更可取吗?

2 个答案:

答案 0 :(得分:3)

不,第一个的唯一目的是允许您执行反序列化,即使您不确定结果类型。 (第二个为你自动执行演员表)但是没有实质性的区别。 (从字面上看,唯一的区别是后者自动演绎前者的结果)

答案 1 :(得分:3)

第二个选项(使用通用Deserialize<T>方法)对于您的特定示例更可取,因为您需要特定类型。

当输入不表示您期望的类型的对象时,两者都会产生稍微不同的结果。在第一种情况下,您在转换中获得InvalidCastException,在第二种情况下,Deserialize方法抛出InvalidOperationException。但除此之外,在性能等方面没有差异。实际上the documentation for Deserialize<T>表明了这一点:

  

Deserialize方法相当于首先使用DeserializeObject方法获取对象图,然后尝试将结果转换为类型T.