.NET MVC4 - 在同一API控制器操作中从Model返回不同的字段子集

时间:2014-04-01 23:31:42

标签: c# json asp.net-mvc-4 asp.net-apicontroller

我在WebAPI控制器中有一个模型和一个动作

public class MyModel 
{
    public ClassA ObjA { get; set; }
    public ClassB ObjB { get; set; }
    public ClassC ObjC { get; set; }
} 

和行动:

[HttpGet]
public MyModel GetMyModel()
{
    MyModel result = someMethod();

    return result;
}

result中的某些属性可能为null。我知道我可以使用[JsonIgnore]来忽略序列化的属性,但我希望它是动态的,并且取决于从someMethod()返回的数据。是否有可能只返回MVC4 .net中JSON中不是null的属性,以便客户在响应中不会获得"ObjA": null之类的内容?基本上我想隐藏一些他们不需要关心的客户的财产。

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容获取对象的属性列表:

PropertyInfo[] properties = result.GetType().GetProperties();

然后,您可以遍历属性列表,并创建一个仅包含非空值的键/值集合。

var notNullProperties = new Dictionary<string, object>();
foreach (PropertyInfo property in properties) 
{
    object propertyValue = property.GetValue(result, null);
    if (propertyValue != null) 
    {
        notNullProperties.Add(property.Name, propertyValue);
    }
 }

然后返回序列化字典。