2012-02-25 15 views
3

MVCコントローラからjsonとしてreturn Json(myObject)を使用して2次元行列を返したいとします。 現時点で私はこのようにしています: return Json(myObject.ToJaggedArray())mvcコントローラからjsonとして2次元配列を返す

ToJaggedArray方法は、次のようになります。

public Field[][] ToJaggedArray() 
{ 
    var jaggedArray = new Field[Rows][]; 

    for (int i = 0; i < Rows; ++i) 
    { 
     jaggedArray[i] = new Field[Columns]; 

     for (int j = 0; j < Columns; j++) 
     { 
      jaggedArray[i][j] = this[i, j]; 
     } 
    } 

    return jaggedArray; 
} 

私はjsファイルをこのように呼んでます

var data = {}; 

$.getJSON("/Game/GetBoard", function (json) { 
    data = json; 
}); 

それはすべて私がToJaggedArrayを(呼び出し避けたいという、事実を除いてうまく動作します) myObjectで私が実装することができる何か(インターフェイスか何か)が箱からそれを働かせるためにありますか? IEnumerableをを実装

答えて

1

はあなたが与えてくれた記述から判断するオプション

ではありません...ので、IEnumerableをを実装するオプションではありません、2次元配列を取得することがあることを確認重要です - 私はではありませんが、かなりあなたがやろうとしていることを確かめてください。それだけでToJaggedArray()コールを取り払うことだしかし、もし:

public class YourClass : IEnumerable 
{ 
    // ... 

    public IEnumerator GetEnumerator() 
    { 
     for (int i = 0; i < Rows; i++) 
     { 
      Field[] result = new Field[Columns]; 
      for (int j = 0; j < Columns; j++) 
      { 
       result[j] = this[i, j]; 
      } 
      yield return result; 
     } 
    } 
} 

出力の例(int[3,3]代わりのField[,]を使用して):

[[2,4,6],[1,2,3],[3,7,9]] 

IEnumerable以上の各繰り返しは、単に1として、現在の行を生成します次元配列Field[](または、この例ではint[])です。

アップデート:別のオプションは、

もっと仕事に必要な、しかし、あなたはまた、JavascriptSerializer.RegisterConvertersを使用してシリアライザにカスタムコンバータを追加して、独自のJsonResultを実装することができ、それはちょうどを取り除くために、トップの上に少しです直接メソッド呼び出し。

+0

ああ、本当に簡単です。私はあなたのやり方の次元を列挙することについて考えていませんでした。それはそれを解決します、ありがとう。 コードを少なくして動作させる方法はないと思いますが、誰かがそれを見て、それが受け入れられた答えのバリエーションでない場合は、投稿してください! –