在使用api odata
的网络v4 protocol
中,如何添加其他属性?
完全动态,没有实体框架,没有反思提供者,
调用url时动态生成元数据。
编辑
Web Api请求网址:
http://locahost/Service1/EntitySet1
实际json输出:
{"@odata.context":"some url", value:[{"id":1}]}
预期的json回复:
{"@odata.context":"some url", value:[{"id":1}], "ExtraCustomAttribute": "custom value"}
如何在回复web api odata v4 json
中添加此自定义属性?
在元数据调用(edmx
响应)和实例有效负载调用(json
响应)中。)
答案 0 :(得分:1)
在OData v4中,至少有两个选项可以实现该行为:开放类型,实例注释。这取决于您的要求或设计决策。
除了在类型定义中声明的任何属性外,open类型还作为包含动态属性的结构化类型添加。开放类型可让您为数据模型增加灵活性。
本教程:
显示了如何在ASP.NET Web API OData中使用开放类型。
实例注释在此处描述: docs.oasis-open.org/odata/odata-json-format/v4.0/os/odata-json-format-v4.0-os.html#_Toc372793088
在您的情况下,尝试将实体声明为:
ODataModelBuilder builder = new ODataModelBuilder();
ComplexTypeConfiguration<YourEntity> pressType = builder.ComplexType<YourEntity>();
// ...
pressType.HasDynamicProperties(c => c.ExtraCustomAttribute);
// public IDictionary<string, object> ExtraCustomAttribute{ get; set; }
并在get action方法中生成实体,如您所愿。 另一个选项可用于控制条目序列化,请点击此处
https://aspnetwebstack.codeplex.com/wikipage?title=OData%20formatter%20extensibility