手动将ClientBase集合类型从Array []更改为List<>

时间:2009-10-08 13:54:58

标签: c# wcf proxy-classes

我正在使用自己的WCF代理和ClientBase,我想做svc util中的ct属性,并告诉代理返回List<>集合类型。

我无法使用List<>因为nhibernate管理的实体所以我必须使用IList

代理不是用svcutil生成的....我自己写了。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

不幸的是,当合同中声明的类型是像IList这样的接口类型时,无法控制WCF实际实例化的类型(实际上,它将是一个数组)。

请参阅http://msdn.microsoft.com/en-us/library/aa347850.aspx

“在反序列化期间,当声明的类型是接口时,序列化引擎选择实现声明的接口的类型,并且实例化类型。已知类型机制(在数据合同已知类型中描述)没有效果在这里; 类型的选择内置于WCF 。“

答案 1 :(得分:0)

您应该能够手动将代理中的所有引用从“数组”修复为“列表” - 基本上只是一个单调乏味的查找和替换。

但是,如果由于某种原因,这不起作用,您可以在代理类周围编写一个包装器,将数组转换为列表。无论如何,这可能会更容易:

private object[] myProperty
public List<object> MyProperty
{
    get
    {
        return p.ToList();
    }
    set
    {
        //initialise if necessary
        p = value.ToArray();
    }
}