我无法使这种情况发挥作用。这是模式-
[DataContract]
/*abstract*/ class BaseT
{ ... }
[DataContract]
class ChildT : BaseT
{ ... }
[DataContract]
class MessageContents
{
[DataMember]
public BaseT[] XX; // Array of BaseT objects. I need WCF to somehow figure out that they're actually ChildT.
}
// ...receive a webHttp request of type MessageContents...
// cast to use MessageContents.XX as a ChildT[] instead of a BaseT[]
ConcreteClass[] QQ = (ConcreteClass[])request.xx;
我尝试使用 KnownType 或 KnownServiceType 注释几乎所有内容,但无济于事。
如果我将 BaseT 设为抽象,则会收到反序列化错误“无法实例化抽象类”。如果我使 BaseT 具体化,我不会收到反序列化错误。相反,当我将它转换为 ChildT 时,我得到“无法将 'BaseT[]' 类型的对象转换为 'ChildT[]' 类型”。