2011-08-14 44 views
0

這是我正在做的基本性質。注意:這是僞代碼。這段代碼來自內存,我沒有智能感知來抨擊我的語法! :-).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多個屬性,因此,我製作了一個ViewModel來保存我需要序列化的屬性,其中很多對於約會和研討會都很常見,這對於事物的JS方面非常有用,因爲我的應用程序對於每個事件是預約還是研討會都是不可知的。有很多共同點,他們並沒有在EventView中使用完全相同的一組屬性(注意Appointment只使用prop1和prop2,而Appointment使用prop1,prop2,prop3和prop5)

目前,我正在發送由於這個請求返回了200KB的JSON,不幸的是,可能是25這是來自序列化但未使用的屬性的絨毛 - 發回作爲{prop1='value', prop2='value', prop3='', prop4='', prop5=''}序列化的研討會。

所以這裏的問題是:當我在控制器中使用return Json(data)時,有沒有辦法遍歷所有序列化數據並刪除所有沒有值的屬性?基本上我想寫一個方法來完成這個:json(data).RemoveEmptyProperties();

想法?

回答

1

使用斯格特庫(https://github.com/substack/js-traverse),像這樣將刪除所有空的節點:

var traverse = require('traverse'); 

traverse(data).forEach(function (x) { 
    var bUpdate = false; 
    for(var key in x) 
    { 
     if("" === x[key]) 
     { 
     delete x[key]; 
     bUpdate = true; 
     } 
    if(bUpdate)this.update(x + 128); 
}); 
3

使物體具有較小的形狀並且只是您需要的屬性。序列化。

3

如果使用NewtonSoft JSON庫,您可以控制哪些通過簡單地在它們之前添加屬性(JsonIgnore)來序列化對象的屬性。您還可以微調屬性名稱(使用JsonProperty屬性)並做更多。與內置的Json序列化程序相比,使用此庫的粒度更容易。