【发布时间】:2015-07-21 10:34:44
【问题描述】:
我正在创建的 Web 服务有问题,问题是,我有一个类,用 PropertyA 将其命名为 ClassA,他是 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并且不知道如何处理“new”关键字来隐藏“字符串PropertyA”,所以它在继承类中为PropertyA创建一个新名称......
有没有办法避免这种行为?我需要像应该调用的那样调用该属性...
【问题讨论】:
标签: c# .net web-services inheritance serialization