1
public static string JsonSerializer<T>(T t)
{
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
    MemoryStream ms = new MemoryStream();
    ser.WriteObject(ms, t);
    string jsonString = Encoding.UTF8.GetString(ms.ToArray());
    ms.Close();
    return json;
}

以上是您典型的 json 辅助方法。<T> 将参数作为类型 T 传递的相关性和相关性是什么?

鉴于所有对象都继承自object,我希望此方法签名为:

public static string JsonSerializer(object t)...

我很欣赏向 SO 社区询问为什么其他人的代码以某种方式读取可能是一种不好的提问方式,但这是在许多文章和教程中都可以找到的一种非常标准的辅助方法,所以我希望这种方法能够被接受一。

4

2 回答 2

4

这只是为了让您不必使用GetType()T获取DataContractJsonSerializer. 它还停止值类型的装箱。

于 2013-07-23T16:46:42.807 回答
3

原因是优化。当某个函数是通用的时,编译器将生成与调用中使用的不同类型一样多的该函数的实例。这意味着每个特定实例都将知道其确切类型并启用特定于参数类型的优化,例如:32 位算术而不是 64 位,避免不必要的装箱,调用非虚拟方法等。

在这种特殊情况下,JsonSerializer<T>(T t)收益可能不会那么大。一般来说,特别是当函数被调用数百万次时,签名中的这种复杂性的增益可能非常值得。

于 2013-07-23T16:51:33.330 回答