属性被"new"在WCF Webservice中被删除

本文关键字:quot 删除 Webservice new 属性 WCF | 更新日期: 2023-09-27 18:03:41

我有一个问题,我正在创建一个Webservice,事情是,我有一个类,命名为ClassA与PropertyA, na ClassB继承ClassA,使用"new"覆盖PropertyA,像这样:

[DataContract]
public class ClassA
{
    [DataMember]
    public string PropertyA { get; set; }
    [DataMember]
    public string PropertyB { get; set; }
}
[DataContract]
public class ClassB : ClassA
{
    [DataMember]
    public new int PropertyA { get; set; }
}

这将使ClassB"替换"ClassA中的字符串PropertyA,为ClassB中的int PropertyA。

我在一个服务方法中像这样公开ClassB:

public bool TellMeSomething(ClassB param) { .... whatever .... }
当我在客户端应用程序中添加服务引用时,导入的类显示如下:
public class ClassA
{
    public string PropertyA { get; set; }
    public string PropertyB { get; set; }
}
public class ClassB : ClassA
{
    public int PropertyA1 { get; set; }
}

你可以注意到,ClassB不再有"new int PropertyA",而是一个"int PropertyA1"。我猜序列化器发现祖先已经有一个PropertyA,不知道如何处理"新"关键字来隐藏"字符串PropertyA",所以它为继承类中的PropertyA创建了一个新名称…

有没有办法避免这种行为?我需要把这个属性命名为。

属性被"new"在WCF Webservice中被删除

您应该使用泛型而不是标识符重用:

[DataContract]
public class ClassA<T>
{
    [DataMember]
    public T PropertyA { get; set; }
    [DataMember]
    public int PropertyB { get; set; }
}
// No need to override PropertyA since T is int and ClassB
// inherits both PropertyA and PropertyB...
[DataContract]
public class ClassB : ClassA<int>
{
}