gpt4 book ai didi

c# - 如何将对象转换为未知的泛型类型?

转载 作者:行者123 更新时间:2023-11-30 21:54:25 25 4
gpt4 key购买 nike

我想构建一个通用方法来调用许多 Web API,例如 Bing map 。对于这个问题,我使用来自的类: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 接口(interface)。谁能帮忙?

谢谢,

大卫

最佳答案

我会在进行回调时对类型进行实际转换,不需要转换类型,因为您已经使用序列化程序读取了对象:

public static void GetResponse<TDataContract>(Uri uri, Action<TDataContract> callback)
where TDataContract : IDataContract, class, new()
{
var contract = new TDataContract();
var contractType = contract.GetType();

var wc = new System.Net.WebClient();
wc.OpenReadCompleted += (o, a) =>
{
if (callback != null)
{
var ser = new DataContractJsonSerializer(typeof(TDataContract));
var obj = ser.ReadObject(a.Result);
callback((TDataContract)obj);
}
};

wc.OpenReadAsync(uri);
}

关于c# - 如何将对象转换为未知的泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33132292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com