标签: binary-deserialization

一个类/对象必须改变多少才能使二进制反序列化失败

我们有一个解决方案,我们将一个相当大/复杂的 C# 对象作为二进制数据存储在我们的数据库中。我担心的是,当对这个类进行更改时,我们冒着保存到数据库的数据在代码更改后反序列化失败的风险。

这是我们用来序列化对象的代码:

    public static byte[] SerializeObject(object toBeSerialized)
    {
        var stream = new MemoryStream();
        var serializer = new BinaryFormatter();
        serializer.Serialize(stream, toBeSerialized);
        stream.Position = 0;
        return stream.ToArray();
    }
Run Code Online (Sandbox Code Playgroud)

这是我们的反序列化方法:

    public static T DeserializeObject<T>(byte[] toBeDeserialized)
    {
        using (var input = new MemoryStream(toBeDeserialized))
        {
            var formatter = new BinaryFormatter();
            input.Seek(0, SeekOrigin.Begin);
            return (T) formatter.Deserialize(input);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,为了使旧对象的反序列化失败,必须改变什么/必须改变多少?

.net c# binary-serialization binary-deserialization

7
推荐指数
1
解决办法
1415
查看次数

C#无法反序列化DataTable

我有一个客户端/服务器项目,我正在尝试通过套接字从服务器向客户端发送DataTable(从TableAdapter中提取).我的服务器命名空间是srvCentral,我的客户端是appClient.当我尝试在客户端反序列化DataTable时,它会抛出一个序列化异常,说无法找到程序集'srvCentral,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'我用谷歌搜索并尝试控制AssemblyResolve之类的东西,这使得svchost挂起并强迫我关闭,并使用这样的绑定器:

sealed class AllowAllAssemblyVersionsDeserializationBinder : SerializationBinder
{
    public override Type BindToType(string assemblyName, string typeName)
    {
        Type typeToDeserialize = null;

        String currentAssembly = Assembly.GetExecutingAssembly().FullName;

        // In this case we are always using the current assembly
        assemblyName = currentAssembly;

        // Get the type using the typeName and assemblyName
        typeToDeserialize = Type.GetType(String.Format("{0}, {1}",
                                         typeName, assemblyName));

        return typeToDeserialize;
    }
}
Run Code Online (Sandbox Code Playgroud)

那里的例外情况仍然存在......是不是假设DataTable可以在任何地方进行反序列化?我究竟做错了什么?

我的序列化代码是:

public byte[] Serializar(Object item)
{
    BinaryFormatter formatter = new BinaryFormatter();
    MemoryStream ms = new MemoryStream();
    formatter.Serialize(ms, …
Run Code Online (Sandbox Code Playgroud)

c# datatable assembly-resolution deserialization binary-deserialization

2
推荐指数
1
解决办法
2906
查看次数

C# 中的二进制反序列化通用对象

我有一个可以序列化的通用类:

MyOwnGenericClass<T>
Run Code Online (Sandbox Code Playgroud)

所以我想反序列化它,如果T是一个String实例处理它,在另一种情况下我想抛出异常。

反序列化时如何知道泛型包含的类型MyOwnGenericClass<T>?我必须将以下代码投射到哪个类?

new BinaryFormatter().Deserialize(fileStrieam);
Run Code Online (Sandbox Code Playgroud)

generics casting deserialization c#-4.0 binary-deserialization

2
推荐指数
1
解决办法
2071
查看次数