BinaryFormatter
效果很好,但不存在于 .NET 4.5 的可移植类库中。
我读到它是在 .NET 4.6 Portable 中。我还没有证实这一点
因为当我在项目设置中更改为 4.6 时,我收到警告
消息“4.5 将自动成为目标”,除非我取消选择
Silverlight、WindowsPhone、Windows Universal、Xamarin 等),因此如果我不针对其他平台,我只能针对 .NET 4.6 Portable,从而达不到目的。
这是我原来的 BinarySerializer (可以工作,但不能使用 PCL,因为使用BinaryFormatter
)
private string BinarySerialize(object Source)
{
byte[] serializedObject;
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, Source);
serializedObject = stream.ToArray();
}
return Convert.ToBase64String(serializedObject);
}
所以,话虽这么说,我开始尝试重写我的二进制序列化器以使用BinaryReader
and BinaryWriter
它们都在 PCL 中可用,但遇到了以下问题:
BinaryWriter
,只能处理简单类型(例如string
, bool
, byte
, long
, int
等)和Streams
,所以我想我需要找到一种方法将匿名对象转换为Stream
.
我走在正确的道路上吗?如何转换直到运行时才知道的类型(例如System.Delegate
- 是的,我知道序列化委托会产生脆弱的代码)或匿名\通用类型到其等效的字节数组byte[]
?有没有办法直接将对象转换为对象Stream
or MemoryStream
?
如果这根本不可能,你会建议我如何写一个interface
对于我的 BinarySerializer,这样我就可以在我的可移植类库中实现该功能,而实际的BinaryFormatter
类实现interface
存在于特定于平台的程序集中吗?
仅供参考,这是一个 MVVM 项目,其中“序列化器”被视为派生自ValueConverter
抽象基类。序列化仅用于将实例化任务传输到目的地执行。