我想序列化一个我没有源代码的类, 有没有办法二进制序列化这个类没有C#中的属性Serializable?
我正在使用微软类来做到这一点 http://msdn.microsoft.com/en-us/library/4abbf6k0(v=vs.110).aspx
答案 0 :(得分:1)
如果没有[Serializable]属性,则无法进行二进制序列化,至少不使用默认机制。
您可以执行XmlSerialization,也可以通过反射创建自定义序列化过程。
编辑我想到了一个技巧,不确定它是否会起作用
也许您可以使用Google的协议缓冲区实现它,让我解释一下。
Google有一个非常轻快的序列化库叫做协议缓冲区,这里是.net实现:https://code.google.com/p/protobuf-net/
如果你创建一个封装目标类的类,我相信(不是100%肯定)它将序列化它。
让我们假设您要序列化的类名为ClasToSer,然后您可以创建这样的类:
[ProtoContract]
public class Encapsulator
{
[ProtoMember(1)]
public ClasToSer RealData{ get; set; };
}
然后您可以使用此类序列化和反序列化:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using ProtoBuf;
public static class ProtoBuffHelper
{
public static byte[] Serialize<T>(T Objeto)
{
MemoryStream ms = new MemoryStream();
Serializer.Serialize<T>(ms, Objeto);
byte[] data = ms.ToArray();
ms.Dispose();
return data;
}
public static T Deserialize<T>(byte[] Datos)
{
MemoryStream ms = new MemoryStream(Datos);
T inst = Serializer.Deserialize<T>(ms);
ms.Dispose();
return inst;
}
}
尝试一下,让我知道它是否有效。