2012-05-09 8 views
0

ListとJsonデータをWebページに戻す必要があるレポートを作成しています。私は多層アプリケーションで作業しています。 WebプロジェクトはMVCを使用して作成されますが、重労働はクラスライブラリで別々のプロジェクトで行われます。C#クラスライブラリからJsonデータを返すことが可能

レポートオブジェクトをクラスライブラリからコントローラに戻していますが、モデルにListsとJsonの組み合わせを返すことは可能でしょうか?理想的には私がレポートモデルには次のようにしたいと思います:

public class Report 
{ 
    public List<TopSellers> TopSellers { get; set; } 
    public List<MonthlySales> MonthlySales { get; set; } 
    public Json ShopSales { get; set; } 

} 

この方法は、リストのものは、通常のようにレンダリングすることができますが、jQueryのは、私が使用しているグラフを描画するために、JSONというリターンをつかむことができ。

これは可能ですか?

私はこれに似て宣言しようとしましたが、私が得る唯一のオプションは 'JsonReaderWriterFactory'です。

今までのJsonの露出はnullだったので、誰かが私を助けたり、正しい方向に向いてくれたら非常に感謝しています。

ありがとうございました。

+2

JSONはテキスト形式です。文字列を返すことはできませんか? – Oded

+0

こんにちはOded、コメントありがとう。私はできた。 jQueryに渡す前にJson形式に変換する必要がありますか? – 109221793

+0

これは悪い考えです。 JSONは、同じシステムの異なる部分間ではなく、システム間で通信するためのものです。 –

答えて

5

JSON.netライブラリを使用してオブジェクトをjson文字列にシリアル化し、ShopSalesプロパティに設定できます。クライアントで

http://json.codeplex.com/

report.OriginalList = objectToSerialize; 

var jsonStr = JsonConvert.Serialize(objectToSerialize); 
report.ShopSales = jsonStr; 

return report; 

あなたはjQueryを使ってShopSalesプロパティを使用することができます。

1

私はここを参照してください(と私も一度採用している)のみのアプローチは、応答に特定の要求をインターセプトし、直接JSONを書き込み、自分のクラスライブラリにHTTPハンドラを作成することです(JSON.netは見てみる価値があります)。

HTTPハンドラの代わりに、build-in ASP.net routing mechanismを直接利用できるかどうかを調べることもできます。

あなたのクラスライブラリは、フロントエンドプロジェクト(つまり、ASP.net MVC/WebForms)への参照として明示的に追加され、そこでハンドラを登録する必要があります。

関連する問題