【发布时间】:2015-10-15 02:51:28
【问题描述】:
我想构建一个通用方法来调用许多 Web API,例如 Bing 地图。对于这个问题,我使用来自 Problem with deserializing JSON on datamember "__type" 的类,它运行良好。
我不完全知道如何将 ser.ReadObject(a.Result) 转换为我作为通用参数提供的类型,在本例中为 LocationQueryResponse。 p>
public static void GetResponse<TDataContract>(Uri uri, Action<TDataContract> callback)
where TDataContract : IDataContract, new()
{
var contract = new TDataContract();
var contractType = contract.GetType();
var wc = new WebClient();
wc.OpenReadCompleted += (o, a) =>
{
if (callback != null)
{
var ser = new DataContractJsonSerializer(typeof(TDataContract));
callback(Convert.ChangeType(ser.ReadObject(a.Result), contractType));
}
};
wc.OpenReadAsync(uri);
}
现在我得到这个错误: 类型参数“TDataContract”不能与“as”运算符一起使用,因为它没有类类型约束,也没有“类”约束基础结构
每个与 Web API 通信的类都继承 IDataContract 接口。 有人可以帮忙吗?
谢谢,
大卫
【问题讨论】:
-
你试过 where TDataContract: IDataContract, new(), class?虽然我认为您可能能够以更简单的方式做到这一点......
-
有什么更简单的方法?
-
如何使用适用于泛型的 JSON 序列化程序。可能是这个:msdn.microsoft.com/en-us/library/bb355316(v=vs.110).aspx
-
好主意,我试试看。
标签: c# asp.net-mvc webclient