ここでは、私がやっていることの基本的な性質があります。注:これは擬似コードです。このコードはメモリからのもので、シンタックスについて私に吠えるintellisenseはありません! :-).NET MVC、Json()でシリアル化されたオブジェクトから情報を削除する
(コードの後に説明)
Controller:
{
public JSONResult GetCalendar(Form){
var data = Workshops.Select().ToEventViews();
var moreData = Appointments.Select().ToEventViews();
data.AddRange(moreData);
return Json(data);
}
}
ViewModel
{
public class EventView{
string prop1;
string prop2;
string prop3;
string prop4;
string prop5;
}
}
BLL
{
public EventView ToEventView(Workshop w){
return new EventView{
prop1 = w.thing;
prop2 = w.thing2;
//props 3, 4 and 5 not needed
}
}
public EventView ToEventView(Appointment a){
return new EventView{
prop1 = a.thing;
prop2 = a.thing;
prop3 = a.thing;
prop5 = a.thing;
}
}
public List<EventView> ToEventView(List<Workshop> wshops){
return wshops.ConvertAll(w=> w.ToEventView().ToList());
}
public List<EventView> ToEventView(List<Appointment> appts){
return appts.ConvertAll(a=> a.ToEventView().ToList());
}
}
私はAJAXのカレンダーアプリを開発しています。あなたが見ることができるように、私はワークシートとアポイントメントのリストを取得していますが、それは多くの共通点があります(実際にはプロパティに基づいています)。実際には、EventView
クラスには20以上のプロパティがあります。私のアプリは、各イベントがアポイントやワークショップであるかどうかには無関係なので、JSの面では本当に役に立ちます。
アポイントメントとワークショップ一般的には、EventViewで全く同じプロパティを使用していません(注意:Appointmentはprop1とprop2を使用し、Appointmentはprop1、prop2、prop3とprop5を使用します)。
現在、私は送信していますJSONの200KBをこのリクエストの結果として返します。悲しいことに、おそらく25このうち%はシリアライズされていて使用されていないプロパティからのものです - {prop1='value', prop2='value', prop3='', prop4='', prop5=''}
としてシリアル化されたワークショップを送り返してください。
コントローラのreturn Json(data)
には、すべてのシリアル化されたデータを繰り返し処理し、値のないすべてのプロパティを削除する方法がありますか?基本的には、これを実現するメソッドを記述したいと思います。json(data).RemoveEmptyProperties();
考えられますか?