反序列化JSON对象:使用哪一个?

时间:2015-03-30 14:14:37

标签: c# json deserialization json-deserialization

我意识到有两种方法可以将JSON反序列化为对象。

假设我有一个包含JSON数据的字符串json,一个名为Name的类型,以及一个名为ser的JavaScriptSerializer:

JavaScriptSerializer ser = new JavaScriptSerializer(typeof(Name));

我们可以使用

反序列化JSON
ser.Deserialize(json, typeof(Name));

ser.Deserialize<Name>(json);

这两者有什么区别吗?

2 个答案:

答案 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);
    }