2013-09-03 14 views
6

mümkün çıkışı Ben kendi ayrıştırıcı yazabilirsiniz biliyor yerineMongo C# Sürücü ve NesneKimliği JSON dize biçimi

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

ait ObjectID

olarak
{ "id" : "522100a417b86c8254fd4a06" } 

ama için için JsonWriterSettings zorlamak için mi Kod bakımı uğruna, muhtemelen Mongo JsonWriterSettings geçersiz kılmak için bulmak istiyorum.

Bu mümkün mü, hangi sınıfları/arabirimleri geçersiz kılmalıyım?

+0

Serileştirme işleminin yapılma şeklini değiştirmenizi tavsiye etmem. Büyük olasılıkla nesne yapısı için anlamlı olan bir şekilde yazılmıştır. Bunun yerine, formatı eşleştirmek için serileştirdiğim nesneyi modelleyebilirim. ad alanı {class id {oid kimliği; } sınıf kimliği {string id}}. Bunun gibi bir şey. – LowDev1

cevap

0

JSON.NET kullanırsanız, ObjectId değerlerini dizelere dönüştüren ve tam tersi bir JsonConverter eklemek kolaydır. Eğer MongoDB C# özelliklerini veya Mapper kullanılarak bir sorununuz yoksa o zaman Formatters.JsonFormatter.SerializerSettings.Converters

6

de dönüştürücüler varsayılan kümesine bu ekleyebilir ASP.NET WebAPI yılında

, o zaman böyle bir şey yapabilirsiniz:

Bu şekilde, normal olarak (serileştirme de dahil olmak üzere) bir dize olarak, ancak MongoDB onu seri hale getirdiğinde, vb., Dahili olarak ObjectId olarak değerlendirilebilir. Sınıf harita tekniğini kullanarak:

BsonClassMap.RegisterClassMap<Order>(cm => { 
    cm.AutoMap(); 
    cm.SetIdMember(cm.GetMemberMap(c => c.Id); 
    cm.GetMemberMap(c => c.Id) 
     .SetRepresentation(BsonType.ObjectId); 
});