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)
传递false以GetCustomAttributes确保仅返回此类的属性,而不返回其基类的属性.