我有一个ServiceContract返回动态类型,如下所示:
public dynamic LoginViaOpenId(string openIdUrl)
Run Code Online (Sandbox Code Playgroud)
动态返回类型可以是DataContract我定义的,也可以是字符串.但由于我没有使用我DataContract的服务,客户端对此一无所知,也无法访问它.
我的DataContract情况如下:
[DataContract]
public enum OpenIdStatus
{
[EnumMember]
Authenticated,
[EnumMember]
Authenticating,
[EnumMember]
Cancelled,
[EnumMember]
Failed,
[EnumMember]
RedirectToLogon
}
Run Code Online (Sandbox Code Playgroud)
我知道如果我有过可以用来KnownType征服它的分层类型,但我不相信这种情况.任何的想法?
All*_*nek 17
动态DataContract是矛盾的.DataContract是预定的并且相互认可的数据结构,并且dynamic是其结构未预先确定并因此不能达成一致的对象,因为它可以是任何东西.
实际上,您实际上不需要返回动态数据类型,而是返回不同的数据类型.不同之处在于变化数据类型是一组固定数据类型之一,而动态数据类型是不具有预定结构的数据类型.由于您的返回值是几种已知形状之一,因此无需使用WCF不支持的"无形"(或"自由形式")动态类型.
相反,您可以让[OperationContract]方法返回一个类型,该类型[DataContract]将充当具有单个数据成员类型的包装器对象object,并[KnownType]在包装器对象上使用以指定可能在包装器内返回的可能类型.由于所有内容都是从中继承的object,因此已经存在层次结构.
[DataContract]
[KnownType(typeof(OpenIdStatus))]
[KnownType(typeof(string))]
public class ReturnValue
{
[DataMember]
public object Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9633 次 |
| 最近记录: |