在MyRequest课程中,我有:
public static T RetrieveData<T>(Uri uri) where T : class, new()
{
return requestData<T>(query);
}
Uri返回一个字符串数组,例如:
{
"prop1": "JOHN",
"prop2": "JULIE",
"value": 9
},
{
"prop1": "KATE",
"prop2": "Ryan",
"value": 8
}
这就是我调用方法的方法:
var obj = MyRequest.RetrieveData<MyObject[]>("http://.....");
这就是MyObject的定义方式:
public class MyObject
{
public string prop1;
public string prop2;
public double value;
}
这是我得到的错误:
MyObject []'必须是具有公共无参数构造函数的非抽象类型,才能在泛型类型或方法'MyRequest.RetrieveData(uri)'中将其用作参数'T'
当我调整uri以返回一个包含1个元素的数组并调用它时,我得到了正常工作的方法:
var obj = MyRequest.RetrieveData<MyObject>("http://.....");
而不是
MyObject[]
但我真的需要使用数组。 有什么想法吗?
答案 0 :(得分:2)
因为类型T []是固定大小数组并且没有无参数构造函数。很明显,固定大小的数组需要此大小。例如:
{
"country_id" : 328.0,
"country_name" : "UK",
"regions" : [
{
"region_id" : 1.0,
"region_name" : "west midlands",
"govenor_id" : "007"
},
{
"region_id" : 2.0,
"region_name" : "east midlands",
"govenor_id" : "008"
}
],
"cities" : [
{
"city_id" : 1.0,
"region_id" : 1.0,
"city_name" : "Birmingham"
},
{
"city_id" : 2.0,
"region_id" : 1.0,
"city_name" : "coventry"
},
{
"city_id" : 3.0,
"region_id" : 1.0,
"city_name" : "warsaw"
},
{
"city_id" : 4.0,
"region_id" : 2.0,
"city_name" : "dudley"
},
{
"city_id" : 5.0,
"region_id" : 2.0,
"city_name" : "blabla"
}
]
}
你不能初始化这样的东西:
var foo = new bar[0];
var foo = new bar[123];
var foo = new bar[count];
因此很明显new()量词不能与固定大小的数组一起使用。
答案 1 :(得分:1)
您应该尝试反序列化为List<T>
而不是数组作为您的JSON库(可能是JSON.Net,但很难从您的代码中猜出)要求类型具有构造函数。例如:
var obj = MyRequest.RetrieveData<List<MyObject>>("http://.....");