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

Deserializing JSON objects: which one to use?

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

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

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

我们可以使用

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

ser.Deserialize<Name>(json);

这两个有什么区别吗?

开始此类问题的最佳位置是 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>the same internal Deserialize function 的包装,而无类型 Deserialize() 是。但是,使用它的好处是您可以返回已知类型,而不是 object,因为它已经为您完成了转换。

在内部,Deserialize 和 Deserialize 都根据来源调用静态 JavaScriptSerializer.Deserialize():http://referencesource.microsoft.com/#System.Web.Extensions/Script/Serialization/JavaScriptSerializer.cs,a161828699d90ec4,references

反序列化

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