为什么C#Arrays类型IsSerializable属性是True?

Has*_*yat 15 .net c# arrays serialization

我只是好奇为什么C#数组返回true他们的IsSerializable属性.数组没有任何Serializable属性,并且它们也没有实现ISerializable接口,那么为什么IsSerializable属性设置为true

当我尝试下面的代码时,它在控制台中输出"True":

Console.WriteLine (new string[0].GetType().IsSerializable);
Run Code Online (Sandbox Code Playgroud)

输出是:

True
Run Code Online (Sandbox Code Playgroud)

在线尝试

我的.NET运行时版本是3.5.

das*_*ght 21

Arrays没有任何Serializable属性,也没有实现ISerializable接口

Arrayclass,C#数组的隐式基类,具有[SerializableAttribute]:

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Array : ICloneable, IList, ICollection, 
    IEnumerable, IStructuralComparable, IStructuralEquatable
Run Code Online (Sandbox Code Playgroud)

(参考)

看来编译器也会添加[SerializableAttribute]到数组类型本身

foreach (var a in typeof(string[]).GetCustomAttributes(false)) {
    Console.WriteLine(a); // Prints "System.SerializableAttribute"
}
Run Code Online (Sandbox Code Playgroud)

传递falseGetCustomAttributes确保仅返回此类的属性,而不返回其基类的属性.

演示.