【发布时间】:2019-11-07 01:35:07
【问题描述】:
我有一个类库,其中有一个标记为 [Serializable] 的类。如果我直接引用项目,我可以使用 BinaryFormatter 序列化类:
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
var data = ms.ToArray();
但是,如果我通过 nuget 发布类库,它会丢失 [Serializable] 属性,并且无法再使用 BinaryFormatter 将其转换为字节数组。
在创建 .nupkg 时,有没有办法按原样保留类?目前,我只是在构建时使用 Visual Studios Generate Nuget Package。
经过进一步调查,让我澄清一下我的发现。
*如果你有一个 .net472 Web API 和一个 .net472 类库,并且你通过 nuget 发布类库,一切正常。我已经使用 BinaryFormatter 序列化了一个标有 [Serializable] 属性的对象,并将其成功发送到服务器并能够对其进行反序列化。
*如果您有一个 .netstandard 2.0 库,并且您将其发布到 .netstandard 控制台项目并尝试使用 binaryformatter 对其进行序列化,您会得到该类未标记为可序列化(即使已标记)。
*如果您有一个 .net472 库并将其发布到 netstandard 2.0 控制台应用程序,我无法序列化该类,但这是由于其他原因,如果我收到错误:
在程序集“System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”中的类型“System.Text.Encoding”未标记为可序列化。”
简而言之,如果您真的需要二进制序列化,除了让客户端和服务器都支持完整的框架库而不是核心/网络标准之外,我不知道还有其他选择。
【问题讨论】:
-
浏览this。看起来您可能会遇到问题。
-
谢谢,有机会我会看看,但看起来不错。
-
查看此问题后问题仍然存在。 .NetCore 确实支持您发送的链接帖子所讨论的可序列化属性 - 它刚刚被删除并放入单独的包中。问题是,为什么 nuget 会删除 .net core 允许的序列化? (单独的问题。)
-
刚刚创建了一个 .net472 项目。添加了一个带有序列化的类并使用 nuget.exe 发布。它去除了序列化属性。有什么方法可以告诉 nuget 不要剥离它们?
标签: c# serialization nuget .net-standard-2.0