Mongo C#驱动程序和ObjectID JSON字符串格式

时间:2013-09-03 16:43:58

标签: c# json mongodb

是否可以强制JsonWriterSettings输出ObjectID

{ "id" : "522100a417b86c8254fd4a06" }

而不是

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

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

如果可以,我应该覆盖哪些类/接口?

2 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:0)

如果您使用JSON.NET,则可以轻松添加JsonConverter,将ObjectId值转换为字符串,反之亦然。

在ASP.NET WebAPI中,您可以将其添加到Formatters.JsonFormatter.SerializerSettings.Converters

的默认转换器集