我一直在寻找解析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\" }");
第一个是将对象转换为类型,第二个是指定类型?他们之间有什么真正的区别一种方法更可取吗?
答案 0 :(得分:3)
不,第一个的唯一目的是允许您执行反序列化,即使您不确定结果类型。 (第二个为你自动执行演员表)但是没有实质性的区别。 (从字面上看,唯一的区别是后者自动演绎前者的结果)
答案 1 :(得分:3)
第二个选项(使用通用Deserialize<T>
方法)对于您的特定示例更可取,因为您需要特定类型。
当输入不表示您期望的类型的对象时,两者都会产生稍微不同的结果。在第一种情况下,您在转换中获得InvalidCastException,在第二种情况下,Deserialize方法抛出InvalidOperationException。但除此之外,在性能等方面没有差异。实际上the documentation for Deserialize<T>
表明了这一点:
Deserialize方法相当于首先使用DeserializeObject方法获取对象图,然后尝试将结果转换为类型T.