このシナリオを機能させることはできません。これがパターンです-
[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[]'にキャストできなくなります。