如何在 Web API 2 中实现 MongoDB Bson 格式化程序?

How do I implement a MongoDB Bson formatter in Web API 2?

我有一个 Web API 2 项目,我的 WebApiConfig 看起来像这样:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config
            .MapHttpAttributeRoutes();


        config
            .Formatters
            .JsonFormatter
            .SupportedMediaTypes
            .Add(new MediaTypeHeaderValue("text/html"));
    }
}

这工作正常,但我希望 json 被解析 'Mongo DB style' 以便自动获得 ObjectID 的序列化,因此我可以在我的模型中的属性上使用 [BsonElement("name")] 等属性 类等等。

我环顾四周,找到了这篇文章 http://odetocode.com/blogs/scott/archive/2013/09/30/custom-serialization-with-json-net-webapi-and-bsondocument.aspx,但它似乎有点过时,我无法使用它。

我暂时陷入困境,非常感谢帮助。

您需要实施并注册自定义媒体格式化程序。基本上,您需要这样做:

  • MediaTypeFormatter(异步 read/write 实现)或 BufferedMediaTypeFormatter(同步 read/write 实现)派生出 class
    • 在 class 构造函数中声明 BSON 格式支持的 MIME 类型
    • 实施CanWriteType+WriteToStreamand/orCanreadType+ReadFromStream
  • 在 Web API 配置中注册媒体格式化程序 class

考虑到将使用格式化程序:

  • 当媒体格式在Content-Type中指定时解析接收到的数据header(这是您实现的读取部分)
  • 当使用 Accept 指定媒体格式时序列化返回的 object header(这是您实现的写入部分)

您可以查看这些示例,或 google "Web API custom media formatters" 获取更多信息和示例: