在WCF Datacontract中使用System.Type

时间:2016-03-03 16:55:06

标签: c# .net wcf

我正在使用WCF构建分布式(客户端 - 服务器都是.NET).NET-Application。正如您在下面的代码中看到的,我想在我的一个DataContrac中使用System.Type来发送参数类型。但是,当我这样做时,我总是得到一个例外。所有其他东西都在工作,这意味着当我删除System.Type属性时它运行良好。

[DataContract]
  public class PluginParametersItemDto
  {
     [DataMember]
     public String Name { get; set; }

     [DataMember]
     public Type Type { get; set; }

     [DataMember]
     public Object Value { get; set; }

     public PluginParametersItemDto(String name, Type type, Object value)
     {
        this.Name = name;
        this.Type = type;
        this.Value = value;
     }
  }

任何人都知道如何将泛型类型定义传递给我的客户端?或者甚至可能吗?

2 个答案:

答案 0 :(得分:0)

你的方法从根本上被打破了。

您无法发送类型 - 您需要发送它所在的程序集(这是一个字节数组)。类型在内存表示中 - 它们可能依赖于其他类型。

现在,如果你在另一边有程序集 - 不要发送类型(就像你那样),而是发送完整的类型名称,那么你可以实例化它。但是,如果我读得正确,这是一个插件设置,那么我认为你有一个问题,你实际上没有接收端的类型 - 然后事情真的有点复杂。

答案 1 :(得分:-1)

这是因为使用DataContractSerializer的默认序列化。尝试切换客户端和服务器以使用嵌入.NET类型信息的NetDataContractSerializer。在这种情况下,您的服务将与标准Web服务不兼容,但只要您确定双方都是用.NET编写的,您就可以了。