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

时间:2017-09-05 16:10:30

标签: c# .net arrays serialization

我很好奇为什么C#数组为true属性返回IsSerializable。数组没有任何Serializable属性,也没有实现ISerializable接口,为什么IsSerializable属性设置为true

当我尝试以下代码时,它在控制台中输出“True”:

Console.WriteLine (new string[0].GetType().IsSerializable);

输出结果为:

True

Try it online

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

1 个答案:

答案 0 :(得分:21)

  

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

Array类是C#数组的隐式基类,具有[SerializableAttribute]

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Array : ICloneable, IList, ICollection, 
    IEnumerable, IStructuralComparable, IStructuralEquatable

(reference)

似乎编译器将[SerializableAttribute]添加到数组类型本身

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

false传递给GetCustomAttributes可确保只返回此类的属性,而不返回其基类的属性。

Demo.