我意识到有两种方法可以将JSON反序列化为对象。
假设我有一个包含JSON数据的字符串json
,一个名为Name
的类型,以及一个名为ser
的JavaScriptSerializer:
JavaScriptSerializer ser = new JavaScriptSerializer(typeof(Name));
我们可以使用
反序列化JSONser.Deserialize(json, typeof(Name));
或
ser.Deserialize<Name>(json);
这两者有什么区别吗?
答案 0 :(得分:4)
这类问题的最佳起点是source code itself。我们在这里看到:
public T Deserialize<T>(string input) {
return (T)Deserialize(this, input, typeof(T), RecursionLimit);
}
public object Deserialize(string input, Type targetType) {
return Deserialize(this, input, targetType, RecursionLimit);
}
这表明Deserialize<T>
是非Deserialize()
所在的the same internal Deserialize
function的包装。然而,使用它的优点是你可以获得一个已知类型而不是object
,因为它已经为你完成了演员表。
答案 1 :(得分:0)
在内部,反序列化&lt; T&GT;和反序列化都根据源调用静态JavaScriptSerializer.Deserialize():http://referencesource.microsoft.com/#System.Web.Extensions/Script/Serialization/JavaScriptSerializer.cs,a161828699d90ec4,references
反序列化&LT; T&GT;:
public T Deserialize<T>(string input) {
return (T)Deserialize(this, input, typeof(T), RecursionLimit);
}
反序列化:
public object Deserialize(string input, Type targetType) {
return Deserialize(this, input, targetType, RecursionLimit);
}