Asp.net web api Web API自定义OData MediaTypeFormatter不';不尊重ModelBuilder信息

Asp.net web api Web API自定义OData MediaTypeFormatter不';不尊重ModelBuilder信息,asp.net-web-api,odata,Asp.net Web Api,Odata,如果我为OData创建自定义媒体类型格式化程序,序列化程序将忽略我的fluent API调用以“忽略”某些属性 假设我有以下OData配置: public class Product { public int Id { get; set; } public string Name { get; set; } } public static class WebApiConfig { public static void Register(HttpConfiguration

如果我为OData创建自定义媒体类型格式化程序,序列化程序将忽略我的fluent API调用以“忽略”某些属性

假设我有以下OData配置:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var builder = new ODataConventionModelBuilder();
        var products = builder.EntitySet<Product>("Products");
        products.EntityType.Ignore(e => e.Name); // IGNORE NAME FIELD
        config.EnableQuerySupport();
        config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());
    }
}
当然,如果我实现自己的
ODataSerializerProvider
等,也会出现相同的结果,但出于示例的目的,我觉得值得指出的是,这种情况甚至会发生在默认实例上

如果我使用以下属性,则“忽略”将被接受:

public class Product
{
    public int Id { get; set; }
            [IgnoreDataMember]
    public string Name { get; set; }
}
但是首先我不喜欢这种方法,其次我不能访问一些类来添加属性

有什么想法吗?

找到了答案

而不是:

    config.Formatters.InsertRange(0,
        ODataMediaTypeFormatters.Create(
        DefaultODataSerializerProvider.Instance,
        DefaultODataDeserializerProvider.Instance));
使用:


还不明白为什么清楚的事情会影响“忽略”
    config.Formatters.InsertRange(0,
        ODataMediaTypeFormatters.Create(
        DefaultODataSerializerProvider.Instance,
        DefaultODataDeserializerProvider.Instance));
    config.Formatters.Clear();
    config.Formatters.AddRange(
        ODataMediaTypeFormatters.Create(
        DefaultODataSerializerProvider.Instance,
        DefaultODataDeserializerProvider.Instance));