Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
307 views
in Technique[技术] by (71.8m points)

c# - What does [System.SerializableAttribute()] do

I am looking at somebody elses C# code and before a public enum there are the following lines:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]

Can somebody explain in plain english what each of these lines are doing.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is actually quite subtle...

On the surface, the answer is simply "it adds the SerialiableAttribute to the metadata for the class", where the purpose of SerializableAttribute is to advertise (to things like BinaryFormatter) that a type can be serialized. BinaryFormatter will refuse to serialize things that aren't explicitly advertised for serialization. This may be a consequence of BinaryFormatter being used to implement remoting, and to prevent data accidentally leaking across a remoting boundary.

Note that most serializers don't care about SerializableAttribute, so this only impacts things like BinaryFormatter. For example, none of XmlSerializer, DataContractSerializer, JavaScriptSerializer, JSON.NET or protobuf-net really care about SerializableAttribute.

However, actually, it is not a standard attribute, but has special handling by the compiler:

  • most attributes are technically .custom instance values (in IL terms)
  • however, SerialiableAttribute actually maps to a CLI .class flag, serializable

This doesn't change the meaning, but : as a novelty fact, SerializableAttribute is not actually implemented as an attribute.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...