我正在尝试将Kendo网格与OData v4控制器一起使用。发回一个非常简单的LogEntry类,上面有一个LogLevel枚举,OData不想对枚举的名称进行本地化。
public class LogEntry
{
public long ID { get; set; }
public LogLevel Severity { get; set; }
}
public enum LogLevel
{
[Display(Name = "Crazy Train Trace")]
Trace = 0,
[Display(Name = "Who Has Info?")]
Info = 100,
[Display(Name = "Lo and Behold: A Warning!")]
Warning = 200,
[Display(Name = "Exception")]
Exception = 300,
[Display(Name = "Uh oh, Jack...")]
CriticalException = 400
}
这是我的WebApiConfig。
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Select().Expand().Filter().OrderBy().MaxTop(null).Count();
var builder = new ODataConventionModelBuilder();
builder.EntitySet<LogEntry>("LogEntry");
builder.EnumType<LogLevel>();
config.MapODataServiceRoute("ODataRoute", "odata", builder.GetEdmModel());
}
在将OData吐出来供Kendo网格显示时,是否有任何方法可以使OData使用某种形式的本地化?
答案 0 :(得分:0)
从OData源代码的5分钟简单搜索中,您可以轻松地看到没有理由期望这种行为。
解决方案是扩展ODataSerializationProvider,以在type == typeof(LogEntry)
时返回自定义ODataSerializer。
然后将新的ODataSerializationProvider
注入ODataConventionModelBuilder
。