无法将类型'System.Collections.Generic.list <fooclass>'隐式转换为'System.Collections.Generic.List <t> </t> </fooclass>

时间:2014-03-07 08:20:47

标签: c# json generics

我知道之前已经提出过这个问题,但我无法从之前的答案中找到或推断出答案。

我正在尝试使用JSON.net库将json字符串转换为列表。我试图使用通用列表来处理转换,但它不断抛出无法隐式转换它的错误。

这是我尝试执行的代码。

public static List<T> Convert<T>(string jsonString, int intCounter)
{
    if (intCounter == 0)
    {
        return (List<fooClass>)JsonConvert.DeserializeObject<List<fooClass>>(jsonString);
    }
    else if (intCounter == 1)
    {
        return (List<fooClass1>)JsonConvert.DeserializeObject<List<fooClass1>>(jsonString);
    }
    else if (intCounter == 2)
    {
        return (List<fooClass2>)JsonConvert.DeserializeObject<List<fooClass2>>(jsonString);
    }
    else
    {
        return null;
    }
}

在调用JSON.net的每一行上都存在错误。

如何使方法通用或显式转换?

干杯。

2 个答案:

答案 0 :(得分:3)

您的方法应如下所示:

public static List<T> Convert<T>(string jsonString)
{
    return (List<T>)JsonConvert.DeserializeObject<List<T>>(jsonString);
}

用法:

var result = Convert<fooClass>(jsonString);

<强> UPD

看不到任何问题,使用以下代码:

public class FooClass1
{
    public int A { get; set; }

    public int B { get; set; }
}

public class FooClass2
{
    public int C { get; set; }

    public int D { get; set; }
}

static void Main(string[] args)
{
    var foo1 = "[{\"a\": 1, \"b\": 2},{\"a\": 2, \"b\": 3}]";
    var foo2 = "[{\"c\": 1, \"d\": 2},{\"c\": 2, \"d\": 3}]";

    var a = Convert<FooClass1>(foo1);
    var b = Convert<FooClass2>(foo2);
}

public static List<T> Convert<T>(string jsonString)
{
    return JsonConvert.DeserializeObject<List<T>>(jsonString);
}

答案 1 :(得分:1)

不要在每一行上执行(List<fooClass2>),而是使用.Cast<T>方法,如下所示:

return JsonConvert.DeserializeObject<List<fooClass2>>(jsonString).Cast<T>().ToList();

这不同之处在于它将列表中的每个对象单独转换为T。将整个列表转换为List<T>是完全不同的操作。