【发布时间】:2014-09-11 20:11:14
【问题描述】:
我需要从响应中完全省略空值字段。 我可以通过为正常的 webapi 响应修改 JsonFormatter 序列化设置来做到这一点。
config.Formatters.JsonFormatter.SerializationSettings
.NullValueHandling = NullValueHandling.Ignore;
但是一旦我切换到OData,这似乎不起作用。
这是我的文件: WebApi.config:
public static void Register(HttpConfiguration config)
{
var builder = new ODataConventionModelBuilder();
var workerEntitySet = builder.EntitySet<Item>("Values");
config.Routes.MapODataRoute("Default", "api", builder.GetEdmModel());
}
物品型号:
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public string OptionalField { get; set; }
}
值控制器:
public class ValuesController : EntitySetController<Item, int>
{
public static List<Item> items = new List<Item>()
{
new Item { Id = 1, Name = "name1", OptionalField = "Value Present" },
new Item { Id = 3, Name = "name2" }
};
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
public override IQueryable<Item> Get()
{
return items.AsQueryable();
}
[Queryable]
protected override Item GetEntityByKey(int id)
{
return items.Single(i => i.Id == id);
}
}
这是我得到的 GET 响应:api/Values。
{
"odata.metadata":"http://localhost:28776/api/$metadata#Values",
"value":[
{
"Id":1,
"Name":"name1",
"OptionalField":"Value Present"
},
{
"Id":3,
"Name":"name2",
"OptionalField":null
}
]
}
但我不需要响应中存在空值的元素 - 在下面的响应中,我需要第二项中不存在“OptionalField”(因为它的值为空)。我需要在我的回复中实现它,我不希望用户只查询非空值。
【问题讨论】:
标签: c# json serialization asp.net-web-api odata