繁体   English   中英

将泛型对象转换为强类型 T

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM