在 wcf 客户端中将 'object' 类型 属性 转换为 knownType
cast 'object' type property to knownType in wcf client
我用一个简单的方法创建了一个 WCF 服务,其中 属性 类型为 'object' 因为这个 属性 旨在用于不同类型的对象,但是当我将 属性 转换为另一种类型,它会抛出 invalidCastException。该服务如下所示:
[ServiceContract]
[ServiceKnownType(typeof(List<ItemDataContract>))]
public interface IService
{
[OperationContract]
ItemContainer GetList();
}
[DataContract]
[KnownType(typeof(List<ItemDataContract>))]
public class ItemContainer
{
[DataMember]
public object Data { get; set; }
}
[DataContract]
public class ItemDataContract
{
[DataMember]
public string Id { get; set; }
}
以及方法的实现:
public ItemContainer GetList()
{
return new ItemContainer
{
Data = new List<ItemDataContract> {new ItemDataContract{ Id = "1"}, new ItemDataContract{Id = "2"}
};
}
在客户端,我调用了方法:
Service1 _proxy = new Service1();
var result = _proxy.GetList();
return (List<ItemDataContract>)result.Data;
问题是我在客户端收到无效的转换异常,因为 result.Data 内部是 'object' 类型而不是列表,即使使用 serviceKnowntype 和 knownType。
如何使这个转换成为可能?
你应该试试这个我希望这对你有帮助......
Service1 _proxy = new Service1();
List<ItemContainer> result = _proxy.GetList();
return result.Data.ToList<datatype>();
尝试转换对象类型花费了太多时间,所以我最终创建了一个名为 Data 的新 class,IService1 接口中的所有其他 class 都继承自该数据,并为数据 属性 分配了此类型。对于可枚举类型,我专门为 de Data class 中的每个类型创建了一个 属性。我确定这不是最佳答案,但它可以将已知类型与 ItemContainer 一起使用。
我用一个简单的方法创建了一个 WCF 服务,其中 属性 类型为 'object' 因为这个 属性 旨在用于不同类型的对象,但是当我将 属性 转换为另一种类型,它会抛出 invalidCastException。该服务如下所示:
[ServiceContract]
[ServiceKnownType(typeof(List<ItemDataContract>))]
public interface IService
{
[OperationContract]
ItemContainer GetList();
}
[DataContract]
[KnownType(typeof(List<ItemDataContract>))]
public class ItemContainer
{
[DataMember]
public object Data { get; set; }
}
[DataContract]
public class ItemDataContract
{
[DataMember]
public string Id { get; set; }
}
以及方法的实现:
public ItemContainer GetList()
{
return new ItemContainer
{
Data = new List<ItemDataContract> {new ItemDataContract{ Id = "1"}, new ItemDataContract{Id = "2"}
};
}
在客户端,我调用了方法:
Service1 _proxy = new Service1();
var result = _proxy.GetList();
return (List<ItemDataContract>)result.Data;
问题是我在客户端收到无效的转换异常,因为 result.Data 内部是 'object' 类型而不是列表,即使使用 serviceKnowntype 和 knownType。
如何使这个转换成为可能?
你应该试试这个我希望这对你有帮助......
Service1 _proxy = new Service1();
List<ItemContainer> result = _proxy.GetList();
return result.Data.ToList<datatype>();
尝试转换对象类型花费了太多时间,所以我最终创建了一个名为 Data 的新 class,IService1 接口中的所有其他 class 都继承自该数据,并为数据 属性 分配了此类型。对于可枚举类型,我专门为 de Data class 中的每个类型创建了一个 属性。我确定这不是最佳答案,但它可以将已知类型与 ItemContainer 一起使用。