C# 如何在c中序列化和反序列化以字节数组作为成员的类#

C# 如何在c中序列化和反序列化以字节数组作为成员的类#,c#,arrays,serialization,deserialization,C#,Arrays,Serialization,Deserialization,我试图以字节流的形式在2个进程之间发送数据,这对几乎所有的类都很好,但我遇到的一个问题是,如果对象的类中有字节数组,反序列化将失败,并给我一个错误,说明无法加载发生序列化的程序集。我不能在这里包含程序集,因为发送方和接收方都是不同的应用程序 有办法解决这个问题吗 Edit:很抱歉,原来即使是普通类也无法在另一端进行反序列化 编辑:两个应用程序中的一个使用.Net 2.0 public static byte[] SerializeToByteArray(this object obj) {

我试图以字节流的形式在2个进程之间发送数据,这对几乎所有的类都很好,但我遇到的一个问题是,如果对象的类中有字节数组,反序列化将失败,并给我一个错误,说明无法加载发生序列化的程序集。我不能在这里包含程序集,因为发送方和接收方都是不同的应用程序

有办法解决这个问题吗

Edit:很抱歉,原来即使是普通类也无法在另一端进行反序列化

编辑:两个应用程序中的一个使用.Net 2.0

public static byte[] SerializeToByteArray(this object obj)
{
    if (obj == null)
    {
        return null;
    }
    var bf = new BinaryFormatter();
    using (var ms = new MemoryStream())
    {
        bf.Serialize(ms, obj);
        return ms.ToArray();
    }
}

public static T Deserialize<T>(this byte[] byteArray) where T : class
{
    if (byteArray == null)
    {
        return null;
    }
    using (var memStream = new MemoryStream())
    {
        var binForm = new BinaryFormatter();
        memStream.Write(byteArray, 0, byteArray.Length);
        memStream.Seek(0, SeekOrigin.Begin);s
        var obj = (T)binForm.Deserialize(memStream);
        return obj;
    }
}
公共静态字节[]序列化为字节数组(此对象obj)
{
if(obj==null)
{
返回null;
}
var bf=新的二进制格式化程序();
使用(var ms=new MemoryStream())
{
bf.序列化(ms,obj);
返回ToArray女士();
}
}
公共静态T反序列化(此字节[]byteArray),其中T:class
{
if(byteArray==null)
{
返回null;
}
使用(var memStream=new MemoryStream())
{
var binForm=new BinaryFormatter();
memStream.Write(byteArray,0,byteArray.Length);
memStream.Seek(0,SeekOrigin.Begin);s
var obj=(T)binForm.Deserialize(memStream);
返回obj;
}
}
我建议您使用(此MSDN链接还提供了如何使用属性装饰类的示例)

然后您可以轻松地(反)将此类类序列化为二进制形式:

public static byte[] SerializeToByteArray<T>(this T obj) where T : class
{
    if (obj == null)
    {
        return null;
    }
    using (var ms = new MemoryStream())
    {
        var serializer = new DataContractSerializer(typeof(T));
        serializer.WriteObject(ms, obj);
        return ms.ToArray();
    }
}

public static T Deserialize<T>(this byte[] byteArray) where T : class
{
    if (byteArray == null)
    {
        return default(T);
    }
    using (var memStream = new MemoryStream(byteArray))
    {
        var serializer = new DataContractSerializer(typeof (T));
        var obj = (T) serializer.ReadObject(memStream);
        return obj;
    }
}

您使用哪种形式的序列化?请添加一些源代码来说明您的情况我正在使用memmory stream来序列化和反序列化…..BinaryFormatter需要精确版本的程序集,其中定义了要序列化/反序列化的类。您需要切换到另一种序列化形式—您可以将一个程序集与您希望在两个应用程序中使用的数据类型一起使用。也许序列化也可以在那个程序集中解决。嘿,很抱歉回复晚了,这就是我所做的,现在它工作正常了!谢谢实际上,我需要的类的数量是完全相同的,没有问题。真正的问题是在.NET2.0上运行的应用程序之一。据我所知,它不支持DataContractSerializer类,很抱歉,这个问题不太详细
public static byte[] SerializeToByteArray<T>(this T obj) where T : class
{
    if (obj == null)
    {
        return null;
    }
    using (var ms = new MemoryStream())
    {
        var serializer = new XmlSerializer(typeof(T));
        serializer.Serialize(ms, obj);
        return ms.ToArray();
    }
}

public static T Deserialize<T>(this byte[] byteArray) where T : class
{
    if (byteArray == null)
    {
        return null;
    }
    using (var memStream = new MemoryStream(byteArray))
    {
        var serializer = new XmlSerializer(typeof(T));
        var obj = (T)serializer.Deserialize(memStream);
        return obj;
    }
}