2016-08-25 1 views
0

FB3とWebAPI2で遊んでいます。私はデータベースからDataTableを埋めることができ、かなり簡単にJSONを返すことができました。ASP.net WebAPI 2を使用すると、Datatableの結果と共にいくつかのカスタムJSONを返すことができます

CURRENTLY

[ 
    { 
    ID: 10016, 
    CREATED: "2016-08-24T21:35:45", 
    MODIFIED: "2016-08-24T21:35:48", 
    KEYNAME: "TEST" 
    }, 
    { 
    ID: 10017, 
    CREATED: "2016-08-24T21:36:38", 
    MODIFIED: "2016-08-24T21:36:41", 
    KEYNAME: "TESTINT", 
    } 
] 

しかし、今、私はこれがどのように行われるかを知っていることを、私は私が中に集まるだろういくつかの他の情報を追加したいと思います。ここ返すJSONがどのように見えるかのサンプルですプロセス。

が必要です:

[ 
    Meta: { 
    status: "OK", 
    message: "All's Well" 
    }, 
    Data: { 
    ID: 10016, 
    CREATED: "2016-08-24T21:35:45", 
    MODIFIED: "2016-08-24T21:35:48", 
    KEYNAME: "TEST" 
    }, 
    { 
    ID: 10017, 
    CREATED: "2016-08-24T21:36:38", 
    MODIFIED: "2016-08-24T21:36:41", 
    KEYNAME: "TESTINT", 
    } 
] 

コードを最初にJSONの結果は以下のようになります取得するには:結果のJSONは、次のようになります、しかしこの時点で

[Route("PerformSelectOnSettings")] 
    [HttpGet] 
    // GET: Connect/TestDBConnection 
    public IHttpActionResult PerformSelectOnSettings() 
    { 

     Connection selectconnection = new Connection(fbconndetails.DBHost, string.Concat(fbconndetails.DBPath, fbconndetails.DBFile), Convert.ToInt32(fbconndetails.DBPort), fbconndetails.DBUser, fbconndetails.DBPassword, fbconndetails.DBConnectionLifeTime, fbconndetails.DBPooling, fbconndetails.DBMinPoolSize, fbconndetails.DBMaxPoolSize); 
     DataTable result = new DataTable(); 



     string sqlcmd = "select * from settings"; 

     using (selectconnection.fbconnect) 
     { 

      try 
      { 
       selectconnection.fbconnect.Open(); 
       FbTransaction fbtrans = selectconnection.fbconnect.BeginTransaction(); 
       FbCommand fbcmd = new FbCommand(sqlcmd, selectconnection.fbconnect, fbtrans); 

       using (FbDataReader fbsqlreader = fbcmd.ExecuteReader()) 
       { 
        try 
        { 
         result.Load(fbsqlreader); 
        } 
        catch (Exception e) 
        { 
         ExceptionsLogByFile logger = new ExceptionsLogByFile(); 
         logger.LogException(e); 
        } 
       } 

      } 
      catch (Exception ex) 
      { 
       ExceptionsLogByFile logger = new ExceptionsLogByFile(); 
       logger.LogException(ex); 
      } 
      finally 
      { 

      } 
      selectconnection.fbconnect.Close(); 
      return Json(result); 

     } 


    } 

I最初の部分をJSONの結果に追加する方法が本当に失われました。私はいくつかの調査をしましたが、私が探しているものは完全にはわかりません。

リンクやヘルプは大変ありがとうございます!

+0

データをバインドするためにモデルクラスを使用していますか? –

+1

必要なデータ構造を作成します。 2つのプロパティを持つもう1つの 'POCO'です。 –

+0

ありがとうございました@AmitKumarGhosh私はPOCOに関する私の研究を行い、独自のデータ構造を作成し、クエリを通して構築されたDataTableを通過させました。すべてが期待どおりに機能します。面白いことに、私は昨晩中途半端でしたが、私は確信が持てなかったので、その実装から取り戻しました。本当にヒントを感謝します。 – CSharpNewb

答えて

2

Expected Jsonは有効ですか?私はそれが次のようにすべきだと思う:

{ 
    "Meta": { 
     "status": "OK", 
     "message": "All's Well" 
    }, 
    "Data": [{ 
     "ID": 10016, 
     "CREATED": "2016-08-24T21:35:45", 
     "MODIFIED": "2016-08-24T21:35:48", 
     "KEYNAME": "TEST" 
    }, { 
     "ID": 10017, 
     "CREATED": "2016-08-24T21:36:38", 
     "MODIFIED": "2016-08-24T21:36:41", 
     "KEYNAME": "TESTINT" 
    }] 
} 

メタデータとデータの2つのプロパティを持つJsonオブジェクト。データは配列です。

あなたがここにあなたのJSONを検証することができます - 私が正しくあなたの問題を理解している場合http://jsonlint.com/

を、あなたは(あなたのデータ配列である)の結果にメタ詳細を追加する必要があります。その場合、匿名のタイプに行くことができます:

var data = new { 
        Meta = new { Status = "OK", Message = "All's well" }, 
        Data = result 
       } 

return Ok(data); 
+0

あなたは正しいですが、私が最初に投稿したものは、JSONView拡張機能が有効になっているChromeブラウザからコピーされました。あなたが投稿したものは、正しい書式(他のブラウザで表示したときに得られるもの)です。 – CSharpNewb

+1

@ CSharpNewb - あなたの問題を正しく理解すれば、結果はJson(結果)です。データ配列であり、メタデータも追加する必要がありますか?そうですか? – Developer

+0

はい、あなたは正しいですが、私が必要とした順序はMetaで、次にDataTableからのData配列でした。私は匿名型のルートを辿ることはありませんでしたが(私はそれがうまくいくと確信していますが)。代わりに、Metaオブジェクト(ステータスとメッセージ付き)とDataTable型のDataオブジェクトとして定義された新しいクラスを作成しました。その後、メタデータとDataTableを新しいクラスに渡してJSONとして返し、WebAPIにJSON文字列を作成させました。完璧に作業し、JSONLINTテストにも合格しました! – CSharpNewb

関連する問題