OData 6.0 缺少 ODataEntityTypeSerializer

OData 6.0 missing ODataEntityTypeSerializer

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

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

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

我派生的 class 是一种防止 null 值序列化的方法。 我编写了新的提供程序来处理 null 基于 this response on SO.

 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

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

在这里查看相同的问题:https://github.com/OData/WebApi/issues/995

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

并且还需要一个自定义的 IContentNegotiator