Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么.Net framework中有这么多简单类型没有标记为可序列化?_C#_Serialization - Fatal编程技术网

C# 为什么.Net framework中有这么多简单类型没有标记为可序列化?

C# 为什么.Net framework中有这么多简单类型没有标记为可序列化?,c#,serialization,C#,Serialization,我发现.Net framework中的许多简单类型都没有标记为可序列化,这是一个反复出现的不便。例如:System.Drawing.Point或矩形 这两种结构都只包含基本数据,应该可以轻松地以任何格式序列化。但是,由于缺少[System.Serializable]属性,我无法将它们与二进制格式化程序一起使用 我个人认为,这与推卸责任的需要关系不大,更多的是与有用性和实际使用有关,再加上.NET框架只是一个框架这一事实。它被设计成一块垫脚石,为您提供基本知识,以完成在其他语言中可能令人望而生畏的

我发现.Net framework中的许多简单类型都没有标记为可序列化,这是一个反复出现的不便。例如:
System.Drawing.Point
矩形

这两种结构都只包含基本数据,应该可以轻松地以任何格式序列化。但是,由于缺少[
System.Serializable
]属性,我无法将它们与
二进制格式化程序一起使用


我个人认为,这与推卸责任的需要关系不大,更多的是与有用性和实际使用有关,再加上.NET框架只是一个框架这一事实。它被设计成一块垫脚石,为您提供基本知识,以完成在其他语言中可能令人望而生畏的任务,而不是为您做任何事情

没有什么能阻止你创建自己的序列化机制和扩展来提供你想要的功能,也没有什么能阻止你依赖其他的产品,比如FOSS或付费产品,它们为你实现了OOB


诚然,@Hans Passant的回答是,我认为这非常接近事实,除了简单的“这不是我的问题”之外,还有很多其他方面。你可以想怎么做就怎么做,但你最终需要摆脱的是,“我能从这里走到哪里?”

这只是一个效率问题。将字段标记为可序列化的编译器必须将每个字段映射到别名表上。如果它们都被标记为可序列化的,则注入或继承它们的每个对象也需要映射到别名表以处理其序列化,而您可能永远不会使用它们,并且它需要内存和处理成本,而且更不安全。用数百万个元素测试它,你会看到。

@Jacobr365我认为问题更多的是为什么开发人员决定不让它们可序列化,而不是如何序列化它们。除了其他任何事情,我通常建议首先避免使用
二进制格式化程序。我发现二进制格式非常脆弱……很难保证在版本1.0中序列化的数据仍然可以在版本4.7中反序列化。对于向类添加字段,您必须三思而后行,因为旧的序列化数据不会为它提供值。微软承担了为BCL类型提供这种保证的责任,但对于未来版本很可能发生变化的GUI类库,他们很难做到这一点。请注意,这是任何序列化方案的一个普遍问题。当您可以将其传递给其他人并使其成为其他人的问题时,就更容易了:)好吧,这不是关于BinaryFormatter,而是关于一般的序列化@汉斯的评论很可能是正确的,我很值得提出一个答案。。(轻推,轻推;-)谢谢你的提议,但不。如果我能把它传给别人,让别人的问题变成这样一个讨厌的答案,那就容易多了:)