1

我一直在寻找解析 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\" }");

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

4

2 回答 2

3

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

于 2012-04-28T00:06:29.907 回答
3

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

当输入不代表您期望的类型的对象时,两者都会产生略微不同的结果。在第一种情况下,您的演员表中会出现 InvalidCastException,而在第二种情况下,Deserialize 方法会引发 InvalidOperationException。但除此之外,在性能等方面没有区别。事实上,文档Deserialize<T>说明了这一点:

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

于 2012-04-28T00:20:24.937 回答