[英]Converting a generic object to a strongly typed T
我正在嘗試編寫一個方法,該方法將采用通用object
並將其轉換為T
類型。 上下文是,我剛剛進行了 REST API 調用,並且我在value
中有響應的內容。 在這種情況下,我碰巧知道返回類型是一個字符串數組。
但當然,情況並非總是如此。
using (var response = await client.SendAsync(request))
{
HttpContent result = response.Content;
object value = ((ObjectContent)result).Value;
List<string> list = GenericToStronglyTyped<List<string>>(value);
List<string> list2 = GenericToStronglyTyped_v2<List<string>>(value);
}
我在這里發現了一個看起來很積極的類似問題: Cast object to T
我嘗試了如下建議的答案:
private T GenericToStronglyTyped<T>(object obj)
{
if (obj is T)
{
return (T)obj;
}
try
{
return (T)Convert.ChangeType(obj, typeof(T));
}
catch (InvalidCastException)
{
return default(T);
}
}
但是,由於以下原因,這將返回null
:
對象必須實現 IConvertible。
所以我想出了我自己的解決方案:
private T GenericToStronglyTyped_v2<T>(object obj)
{
try
{
string json = JsonConvert.SerializeObject(obj);
return JsonConvert.DeserializeObject<T>(json);
}
catch (InvalidCastException)
{
return default(T);
}
}
這確實有效,但感覺有點像噱頭。 解決這個問題的最佳方法是什么?
謝謝!
這確實有效,但感覺有點像噱頭。 解決這個問題的最佳方法是什么?
我覺得你在這里冒險發表意見,但是,這是我的:你提出的花哨的解決方案既經過充分測試,又非常容易閱讀。 我會整天帶着這些。
如果在某些時候序列化的開銷太大,那么回來仔細看看。 但尤其是在分流字符串數據時,需要考慮的邊緣情況太多了。 這是一個已解決的問題,因此我建議您欣賞這些庫的存在並繼續處理您的實際業務邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.