我知道之前已经提出过这个问题,但我无法从之前的答案中找到或推断出答案。
我正在尝试使用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的每一行上都存在错误。
如何使方法通用或显式转换?
干杯。
答案 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>
是完全不同的操作。