.Net核心中的二进制序列化

时间:2017-03-01 08:20:05

标签: .net core binaryformatter

我正在研究.NET Core项目,我正在尝试将List<T>解析为byte[]。 使用.NET Framework,我们可以通过使用BinaryFormatter来实现相同的目标,但在撰写此问题时,看起来Microsoft似乎还没有在.NET Core中支持它,并且似乎没有即将发布的版本。< / p>

有谁可以告诉如何在.NET Core中执行此序列化? 此外,依赖于二进制序列化平台,因此在.NET Core中已弃用。

5 个答案:

答案 0 :(得分:2)

您可以使用MessagePack。该软件包在.Net博客中被选为Package of the week

Nuget命令:

Install-Package MessagePack

您还可以查看他们的source code,看看它是如何在.net核心中实现的。

答案 1 :(得分:2)

您可以使用Binaron.Serializer-https://github.com/zachsaw/Binaron.Serializer 无需使用任何属性来修饰您的类。

免责声明:我是Binaron.Serializer的作者。

答案 2 :(得分:1)

.NET Core 2.1现在包括一个BinaryFormatter,您可以使用此功能。

您可以在this answer中找到更多详细信息。

答案 3 :(得分:1)

BinaryFormatter 由于其 getting obsoleted 而在即将推出的 .NET 版本中为 security flaws

只有在序列化和反序列化都发生在同一个进程中时(大多数情况下不是这种情况),它基本上是安全的,因此已决定从未来的版本中remove

虽然 obsoletion document 表示在 .NET 8 中完整的二进制序列化基础结构将被删除,但我仍然希望这会受到一些影响。我最近开了一个 issue 来讨论使二进制序列化(和任何多态序列化)安全的可能方法:https://github.com/dotnet/runtime/issues/50909

但正如其他答案也说明的那样,您可以选择许多自定义二进制序列化程序。 @ZachSaw 的 Binarion 或 MessagePack 同样受欢迎,几年前我还公开了我的 binary serializer (NuGet)。它试图解决安全方面的问题良好的性能(意味着 speedsize)。

但坦率地说,在远程实体(包括文件和数据库源)之间进行通信时,永远不应使用易受攻击的二进制序列化程序。甚至较慢的基于文本的序列化程序的速度仍然比任何网络通信快得多,因此它们的速度几乎不会成为真正的瓶颈。

答案 4 :(得分:0)

对于有效负载大小和性能,您可以尝试BOIS,它专注于打包数据的大小并提供迄今为止最好的打包。它还支持.Net Core

https://github.com/salarcode/Bois