我发现.Net框架中的许多简单类型都没有标记为可序列化,这是一个经常出现的不便。例如:System.Drawing.Point
或Rectangle
。
这些结构只包含原始数据,并且应该可以轻松地以任何格式进行序列化。但是,由于缺少[System.Serializable
]属性,我无法将其与BinaryFormatter
一起使用。
这有什么理由,我没有看到吗?
答案 0 :(得分:1)
这仅仅是效率问题。将字段标记为可序列化,编译器必须将每个字段映射到别名表上。如果将它们全部标记为可序列化的对象,那么注入或继承它们的每个对象也都需要映射到别名表上,以处理其序列化,这可能是因为您永远不会使用它们,并且这会浪费内存和处理费用,并且更加不安全。用数百万个元素对其进行测试,您将看到。
答案 1 :(得分:0)
就我个人而言,我认为它与需要推卸责任的关系较少,更多地与实用性和实际使用的事实有关,再加上.NET Framework就是一个框架。它旨在成为一个踏脚石,为您提供完成任务的基础知识,否则这些任务将成为其他语言中令人生畏的,而不是为您做任何事情。
确实没有什么能阻止您创建自己的序列化机制和扩展,它们提供您正在寻找的功能,或者依赖于许多其他产品,这些产品是FOSS或付费的,为您实现这一目标。
当然,@ Hans Passant的答案是我认为非常接近事实,还有很多其他方面,这不仅仅是“这不是我的问题”。你可以随心所欲地接受它,但你需要摆脱它的最终目标是,“我可以从哪里离开?”