OData 6.0缺少ODataEntityTypeSerializer

时间:2017-02-01 13:07:50

标签: odata upgrade compatibility

我正在尝试将OData包(Microsoft.AspNet.OData)从v5.9升级到v6.0并且我的代码中断了,因为我有一个扩展ODataEntityTypeSerializer的类。

我在对象浏览器中搜索它并将其删除。当我回到v5.9.1时,它可以工作。

在新的6.0版本中是否有ODataEntityTypeSerializer的替代品,或者这只是一个兼容性中断?

我的派生类是一种阻止null值序列化的方法。 我根据this response on SO编写新的提供商来处理null

 public class NullEntityTypeSerializer : ODataEntityTypeSerializer
    {
        public NullEntityTypeSerializer(ODataSerializerProvider serializerProvider)
            : base(serializerProvider)
        { }

        public override void WriteObjectInline(object graph, IEdmTypeReference expectedType, ODataWriter writer, ODataSerializerContext writeContext)
        {
            if (graph != null)
            {
                base.WriteObjectInline(graph, expectedType, writer, writeContext);
            }
        }
    }

UPDATE(jul / 18):生成此解决方法的SingleResult.Create()问题已在v7.0中得到修复,不再需要了。查看https://github.com/OData/WebApi/issues/170

2 个答案:

答案 0 :(得分:1)

根据https://odata.github.io/WebApi/#07-18-6-0 你应该使用ODataResourceSerializer。

答案 1 :(得分:1)

在此处查看同一问题:https://github.com/OData/WebApi/issues/995

您调用此方法来获取IServiceProvider:https://github.com/OData/WebApi/blob/master/src/System.Web.OData/Extensions/HttpRequestMessageExtensions.cs#L234

还需要一个自定义的IContentNegotiator