2012-09-22 64 views
0

我想從基於列表的對象中刪除所有屬性。創建一個基於屬性列表過濾掉的現有對象的新對象

原因是在我的Web服務調用中,我的響應對象比較大我想讓客戶端能夠限制從對象返回的屬性。

例如

/api/movie/1?filter=Name,Id,Gross 

public class MovieResponse 
{ 
    public string Name {get;set;} 
    public int Id {get;set;} 
    public double Gross {get;set;} 
    public string Director {get;set;} 
    public Rating Rating {get;set;} 
} 

我希望回到基礎上,看上去像這樣

public class MovieResponse 
{ 
    public string Name {get;set;} 
    public int Id {get;set;} 
    public double Gross {get;set;} 
} 

上面的服務電話我想如果我使用ASPNET或WCF我會掛鉤對象進入請求生命週期,並且在將響應返回給客戶端之前做的最後一件事情是運行我的過濾器/行爲,該過濾器/行爲過濾並返回將反序列化爲JSON或XML的新對象

回答

1

如果你選擇使用JSON序列化,你可以創建一個字典,就像@Randolf R-F說的那樣。字典然後會得到serialized into an object, if you use Json.NET

public static Dictionary<string, object> FilterMovie(MovieResponse movie, string[] fields) 
{ 
    var data = new Dictionary<string, object>(); 
    var movieType = movie.GetType(); 

    foreach (var field in fields) 
    { 
     data.Add(field, movieType.GetField(field).GetValue(movie)); 
    } 

    return data; 
} 

然後,另一方面,可以使用MovieResponse類來完成反序列化。

2

我不認爲這是可能的,因爲你要求,你試圖返回一種動態的對象,但函數的返回類型必須鍵入,因此,必須有它的屬性定義良好(雖然可以是可以爲空)。

你可以嘗試的是返回一個Dictionary並基於它的內容重新創建適當的對象。

相關問題