是否可以强制JsonWriterSettings输出ObjectIDas
{ "id" : "522100a417b86c8254fd4a06" }
Run Code Online (Sandbox Code Playgroud)
代替
{ "_id" : { "$oid" : "522100a417b86c8254fd4a06" }
Run Code Online (Sandbox Code Playgroud)
我知道我可以编写自己的解析器,但为了代码维护,我想找到可能会覆盖它的Mongo JsonWriterSettings.
如果可以,我应该覆盖哪些类/接口?
如果您可以使用MongoDB C#属性或Mapper,那么您可以执行以下操作:
public class Order {
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这样,你可以正常地将类型称为字符串(包括序列化),但是当MongoDB序列化它等时,它在内部被视为ObjectId.这是使用类映射技术:
BsonClassMap.RegisterClassMap<Order>(cm => {
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(c => c.Id);
cm.GetMemberMap(c => c.Id)
.SetRepresentation(BsonType.ObjectId);
});
Run Code Online (Sandbox Code Playgroud)
如果您使用 JSON.NET,则可以轻松添加JsonConverter将值转换ObjectId为字符串的方法,反之亦然。
在 ASP.NET WebAPI 中,您可以将其添加到默认的转换器组中:Formatters.JsonFormatter.SerializerSettings.Converters