2017-06-29 4 views
0

私はMyRequestクラスで:「はMyObjectに[]」パラメータとしてそれを使用するパブリックパラメータなしのコンストラクタと非抽象型でなければならない「T」

public static T RetrieveData<T>(Uri uri) where T : class, new() 
{ 
     return requestData<T>(query); 
} 

ウリのような文字列の配列を返します:

{ 

"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に[]ジェネリック型でT 『」のパラメータとして使用するために、公共のパラメータなしのコンストラクタで非抽象型でなければなりません』

var obj = MyRequest.RetrieveData<MyObject>("http://....."); 
:またはメソッド「MyRequest.RetrieveData(URI)」

私は1つの要素だけの配列を返し、それを呼び出すためにURIを微調整する際にうまく動作する方法を得ました 代わり

MyObject[] 

が、私は実際に配列を使用する必要があります。 考えていますか?

+0

代わりに 'List 'を試してみませんか?残念ながら、完全に答えるには十分な情報がありません。 – DavidG

+0

魅力的ですね!どうもありがとうございました。あなたが好きな場合は、答えとして追加することができます。 –

答えて

1

それはタイプbecase起こるT []は固定サイズアレイであり、パラメータなしのコンストラクタを有していません。固定サイズの配列にはこのサイズが必要であることは明らかです。たとえば:

var foo = new bar[](); 
var foo = new bar[]; 

だから、新しい()数量詞は、固定サイズの配列で使用することができないことは明らかである:

var foo = new bar[0]; 
var foo = new bar[123]; 
var foo = new bar[count]; 

あなたはこのような何かを初期化することはできません。

0

JSONライブラリ(おそらくJSON.Netだが、あなたのコードから推測しにくい)として配列の代わりにList<T>にデシリアライズしようとすると、型にコンストラクタが必要です。例えば:

var obj = MyRequest.RetrieveData<List<MyObject>>("http://....."); 
関連する問題