如何在 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
+WriteToStream
and/orCanreadType
+ReadFromStream
- 在 Web API 配置中注册媒体格式化程序 class
考虑到将使用格式化程序:
- 当媒体格式在
Content-Type
中指定时解析接收到的数据header(这是您实现的读取部分)
- 当使用
Accept
指定媒体格式时序列化返回的 object header(这是您实现的写入部分)
您可以查看这些示例,或 google "Web API custom media formatters" 获取更多信息和示例:
我有一个 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
+WriteToStream
and/orCanreadType
+ReadFromStream
- 在 Web API 配置中注册媒体格式化程序 class
考虑到将使用格式化程序:
- 当媒体格式在
Content-Type
中指定时解析接收到的数据header(这是您实现的读取部分) - 当使用
Accept
指定媒体格式时序列化返回的 object header(这是您实现的写入部分)
您可以查看这些示例,或 google "Web API custom media formatters" 获取更多信息和示例: