【问题标题】:How do I implement a MongoDB Bson formatter in Web API 2?如何在 Web API 2 中实现 MongoDB Bson 格式化程序?
【发布时间】:2015-01-14 14:26:39
【问题描述】:

我有一个 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 样式”,以便自动获取 ObjectID 的序列化,因此我可以在模型类中的属性上使用 [BsonElement("name")] 之类的属性等等。

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

我暂时卡住了,非常感谢您的帮助。

【问题讨论】:

    标签: json mongodb asp.net-web-api asp.net-web-api2


    【解决方案1】:

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

    • MediaTypeFormatter(异步读/写实现)或BufferedMediaTypeFormatter(同步读/写实现)派生一个类
      • 在类构造函数中声明 BSON 格式支持的 MIME 类型
      • 实现CanWriteType + WriteToStream 和/或CanreadType + ReadFromStream
    • 在 Web API 配置中注册媒体格式化程序类

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

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

    您可以查看这些示例,或在 Google 上搜索“Web API 自定义媒体格式化程序”以获取更多信息和示例:

    【讨论】:

    • 好的,谢谢。这些都是很好的指示。但是您找到现有的实现了吗?谷歌搜索了很多,但一无所获。我不能成为第一个需要这个的人... =)
    • 我不知道任何实现。但是,有一个 BSON (de)serializer 的现有实现:docs.mongodb.org/ecosystem/tutorial/… 如果您使用它,您的自定义格式化程序的实现几乎是微不足道的。
    猜你喜欢
    • 1970-01-01
    • 2015-06-14
    • 2014-10-03
    • 2013-08-15
    • 2017-08-30
    • 1970-01-01
    • 2017-05-28
    • 2011-09-02
    • 1970-01-01
    相关资源
    最近更新 更多