6

是否可以强制JsonWriterSettings输出ObjectIDas

{ "id" : "522100a417b86c8254fd4a06" }

代替

{ "_id" : { "$oid" : "522100a417b86c8254fd4a06" }

我知道我可以编写自己的解析器,但是为了代码维护,我想找到可能覆盖Mongo JsonWriterSettings.

如果这是可能的,我应该覆盖哪些类/接口?

4

2 回答 2

6

如果您可以使用 MongoDB C# 属性或 Mapper,那么您可以执行以下操作:

public class Order {
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
}

这样,你可以正常地把类型称为字符串(包括序列化),但是当 MongoDB 序列化它等时,它在内部被视为一个 ObjectId。这是使用类映射技术:

BsonClassMap.RegisterClassMap<Order>(cm => {
    cm.AutoMap();
    cm.SetIdMember(cm.GetMemberMap(c => c.Id);
    cm.GetMemberMap(c => c.Id)
       .SetRepresentation(BsonType.ObjectId);
});
于 2013-09-03T17:50:45.020 回答
0

如果您改用 JSON.NET,则很容易添加JsonConverterObjectId值转换为字符串的 a,反之亦然。

在 ASP.NET WebAPI 中,您可以将其添加到默认的转换器集Formatters.JsonFormatter.SerializerSettings.Converters

于 2013-09-03T17:05:08.553 回答