2017-12-23 16 views
0

はここで自分のクラスにJSONに変換私のコードです。一般的な配列コンストラクタ

これをさらに4回実行する必要があります。

JSONArrayをカスタムクラスに変換し、文字列として各プロパティを取得してJSON配列から読み込むジェネリックを作成しようとしています。

私のコードはこのように見えますが、動作しません。クラスのパブリックプロパティを列挙できるかどうかはわかりません。

public class JSONArrayConverter<T> 
{ 
    public JSONArrayConverter(JSONNode p) 
    { 
     JSONArray tab = p.AsArray; 
     IList<T> result; 
     for (int i = 0; i < tab.Count; i++) { 
      JSONNode value = tab[i]; 
      result[i] = new <T>(); 
     } 
    } 
} 

このコードは動作しません、私はここにこだわっている:result[i] = new <T>();

+0

2つのもの。 1) 'new List ()'と2) 'T'を指定する必要があります。 – Draco18s

+0

3)' result'がリストで、リストの要素ではなく 'result'をリストに設定する必要があります。 – Draco18s

答えて

2

あなたはリフレクション

public JSONArrayConverter(JSONNode p) 
{ 
    JSONArray tab = p.AsArray; 
    IList<T> result = new List<T>(); 
    for (int i = 0; i < tab.Count(); i++) 
    { 
     JSONNode value = tab[i]; 
     result[i] = (T)Activator.CreateInstance(typeof(T), value); 
    } 
} 

またはインタフェースを使用することができます

public interface JSONConvertable 
{ 
    void Initialise(JSONNode node); 
} 

public class JSONArrayConverter<T> where T : JSONConvertable, new() 
{ 
    public JSONArrayConverter(JSONNode p) 
    { 
     JSONArray tab = p.AsArray; 
     IList<T> result = new List<T>(); 
     for (int i = 0; i < tab.Count(); i++) 
     { 
      JSONNode value = tab[i]; 
      result[i] = new T(); 
      result[i].Initialise(value); 
     } 
    } 
} 

EDIT:

またはコールバック

public JSONArrayConverter(JSONNode p, Func<JSONNode, T> creator) 
{ 
    JSONArray tab = p.AsArray; 
    IList<T> result = new List<T>(); 
    for (int i = 0; i < tab.Count(); i++) 
    { 
     JSONNode value = tab[i]; 
     result[i] = creator(value); 
    } 
} 
+0

これは一般的なものではありません。なぜなら、キーの名前とクラスのプロパティをループしたいと思うからです。

+0

あなたはパラメータとして値を持つことができます – rokkerboci

+0

私はプロパティをループしたくないので、クラス自身でそれを処理させてください。リフレクションを使うのは面倒で、実際は遅いです – rokkerboci

関連する問題