Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法强制转换系统。请将类型转换为字节[]_C#_.net - Fatal编程技术网

C# 无法强制转换系统。请将类型转换为字节[]

C# 无法强制转换系统。请将类型转换为字节[],c#,.net,C#,.net,我有一个包含C#/VB.NET的n层业务应用程序项目,在获取层间通信的更新方法时遇到问题。在离数据库最近的数据层中,我有一个GetByID()方法,该方法基于数据库中的员工ID查找员工,并将其标题、名字等以及实体作为一个整体(序列化)放在字典中 在下一层(businessuser),我尝试将其私有成员设置为businessuser GetByID()方法的结果,该方法调用数据层GetByID()方法。在这里,我正试图设置我的私人会员 _entity = (byte[])retDict["enti

我有一个包含C#/VB.NET的n层业务应用程序项目,在获取层间通信的更新方法时遇到问题。在离数据库最近的数据层中,我有一个GetByID()方法,该方法基于数据库中的员工ID查找员工,并将其标题、名字等以及实体作为一个整体(序列化)放在字典中

在下一层(businessuser),我尝试将其私有成员设置为businessuser GetByID()方法的结果,该方法调用数据层GetByID()方法。在这里,我正试图设置我的私人会员

_entity = (byte[])retDict["entity"];
这给了我一个错误,即无法将byte[]隐式键入System.type,因为_entity是一个类型

在VB中完成的表示层通过listview选择值传递employeeID,然后依次传递到用户层和数据层

以下是EmployeeBusinessData层GetByID()代码:

反序列化程序有两种不同类型:

 public static Object Deserializer(byte[] ByteArrayIn, Type entityType)
    {
        MemoryStream stream = new MemoryStream(ByteArrayIn);
        DataContractSerializer ser = new DataContractSerializer(entityType);
        Object returnObject = ser.ReadObject(stream);
        return returnObject;
    }
public static Object Deserializer(byte[] ByteArrayIn)
    {
        BinaryFormatter frm = new BinaryFormatter();
        MemoryStream strm = new MemoryStream(ByteArrayIn);
        Object returnObject = frm.Deserialize(strm);
        return returnObject;
    }
如何让retDict[“entity”]强制转换为一个字节,以便将其分配给_entity?

这是您的问题:

private Type _entity;
您可能需要一个Employee对象,如下所示:

private Employee _entity;
或者,如果您想要一个可以容纳任何类型对象(或实体)的变量,请使用
对象
类型:

private object _entity;
NET中的
Type
是表示类类型的类,而不是类本身

如果我有一个这样的班:

public class Person
{
}
我可以将其存储在Person变量中:

Person somePerson = new Person();
object someObject = new Person();
Type someType = typeof(Person);
或在对象变量中:

Person somePerson = new Person();
object someObject = new Person();
Type someType = typeof(Person);
但我只能将对象的类型存储在
type
变量中:

Person somePerson = new Person();
object someObject = new Person();
Type someType = typeof(Person);
或者,如果您有对象的实例,则可以按如下方式获取其类型:

Person somePerson = new Person();
Type typeOfSomePerson = somePerson.GetType();
但很可能你根本就不想要这种类型

编辑:

我注意到你的问题没有反序列化两次。首先序列化实体,然后分别序列化其字段。我不知道你为什么要把所有东西序列化两次。但至少需要反序列化两次

因此,改变这一点:

_entity = (byte[])retDict["entity"];
为此:

_entity = (Employee)Deserialize((byte[])retDict["entity"], typeof(Employee));
这实际上是说,“从字典中检索Employee的序列化字节,将字节反序列化到Employee实例中,并将其转换为Employee,因为方法的返回类型是object。”


但就像我说的,似乎每个领域你都做了两次。您只需序列化实体本身一次,然后再次反序列化该实体。除非您的逻辑中缺少某些内容。

由于所讨论的值是从您的
序列化程序
方法返回的,该方法的详细信息非常重要。发布
\u实体的定义
也发布
反序列化程序
方法。我对我的答案进行了一些编辑,有一些事情你可能会改变。