将类型转换为相同类型但在不同的程序集中?

时间:2015-02-11 05:42:55

标签: c#

我序列化了一个类并使用IPC将其发送到另一个应用程序,但是当我尝试将接收到的类强制转换为同一个类(但是在不同的程序集中)时,如果安全转换,我总是得到null如果直接演员,则抛出异常..

那么如何才能访问收到的类IPC的数据成员?注意我使用JSON序列化和反序列化将我的类发送到另一个应用程序。

我尝试使用相同的程序集名称设置两个应用程序,但这不起作用。

我也尝试使用相同的结果设置Assembly GUID。

2 个答案:

答案 0 :(得分:1)

如果在不同的程序集中有相同的类名,那么即使它们具有相同的名称,它们也是两种不同的类型。进行通用程序集并在序列化和反序列化结束时使用。

如果您不希望使用推荐方式的公共程序集,则可以获取序列化的json字符串并从此字符串中获取属性和值,并使用它们来创建所需的对象。

我使用JSON.NET将json字符串转换为字典以访问带有值的属性。您可以采用更多方式here

Dictionary<string, string> dic = JsonConvert.DeserializeObject < Dictionary<string, string>>(jsonSerializedString);
MyObject myObject = new MyObject { Name = dic["Name"], Id = int.Parse(dic["Id"]) };

我使用了MyObject,它将被你的类型替换

public class MyObject
{
    public int Id { get; set; }
    public string Name { get; set; }
}

答案 1 :(得分:0)

不要将different assemblydifferent namespace混淆。

如果这确实是相同的类,您应该将它放在双方都可见/可访问的命名空间中。尝试将您的类放在一个双方引用的公共程序集中。

如果您无法更改装配结构,请定义界面(在附加装配中),双方都可以参考。在接收方,您可以声明一个实现此接口的新类。