C# [anonymous\generic] object to byte[] without BinaryFormatter [in .NET 4.5]?

喜欢而已 提交于 2020-01-04 02:15:14

问题


BinaryFormatter works great, but doesn't exist in Portable class libraries for .NET 4.5.

I've read that it IS in .NET 4.6 Portable. I have not confirmed this because when I change to 4.6 in my project settings, I get a warning message that "4.5 will be automatically targeted" unless I de-select Silverlight, WindowsPhone, Windows Universal, Xamarin, etc), so I can only target .NET 4.6 Portable if I'm NOT targeting additional platforms, thus defeating the purpose.

Here is my original BinarySerializer (Works but NOT PCL because uses 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);
}

So, that being said, I started trying to re-write my BinarySerializer to use BinaryReader and BinaryWriter which are both available in PCL, and ran into the following issues:

BinaryWriter, can only handle simple types (like string, bool, byte, long, int, etc) and Streams, so think I need to find a way to convert anonymous objects to a Stream.

Am I on the right path? How do you convert types which are not known until runtime (like a System.Delegate - and yes I know serializing delegates produces brittle code) or anonymouse\generic types to their equivalent byte array byte[]? Is there a way to convert an object directly to a Stream or MemoryStream?

If this is not possible at all, how would you recommend I write an interface for my BinarySerializer, so I can implement the functionality in my portable class library while the actual BinaryFormatter classes implementing the interface exists in platform-specific assemblies?

FYI, this is an MVVM project in which "Serializers" are considered Models deriving from a ValueConverter abstract base class. Serialization is only used to transport instantiated tasks to their destination for execution.

来源:https://stackoverflow.com/questions/36315037/c-sharp-anonymous-generic-object-to-byte-without-binaryformatter-in-net-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!