我想根据列表从对象中删除所有属性。
原因是在我的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
答案 0 :(得分:2)
我不认为这是可能的,因为你要求,你试图返回一种动态对象,但必须输入函数的返回类型,因此,必须明确定义它的属性(尽管可能是可以为空的)。
您可以尝试返回Dictionary并根据其内容重新创建正确的对象。
答案 1 :(得分: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类完成反序列化。