2013-09-03 13 views
6

यह संभव ObjectID रूपमोंगो सी # चालक और ObjectID JSON स्ट्रिंग स्वरूप

{ "id" : "522100a417b86c8254fd4a06" } 

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

के बजाय

मैं जानता हूँ कि मैं अपने ही पार्सर लिख सकता है, लेकिन के लिए उत्पादन के लिए JsonWriterSettings मजबूर करने के लिए है कोड रखरखाव के लिए, मैं संभवतः Mongo JsonWriterSettings को ओवरराइड करना चाहता हूं।

यदि यह संभव है, तो मुझे कौन से वर्ग/इंटरफेस को ओवरराइड करना चाहिए?

+0

मैं deserialization के तरीके को बदलने की सिफारिश नहीं करेंगे। यह संभवतः इस तरह से लिखा गया है जो वस्तु संरचना के लिए समझ में आता है। इसके बजाय मैं अपनी वस्तु का मॉडल करूंगा, मैं प्रारूप से मेल खाने के लिए क्रमबद्ध हूं। नेमस्पेस ऑब्जेक्ट {क्लास आईडी {ओआईडी आईडी; } कक्षा ओआईडी {स्ट्रिंग आईडी}}। ऐसा कुछ। – LowDev1

उत्तर

0

यदि आप JSON.NET का उपयोग करते हैं तो इसके बजाय JsonConverter जोड़ना आसान है जो ObjectId मानों को स्ट्रिंग्स और इसके विपरीत में परिवर्तित करता है।

ASP.NET वेबएपीआई में आप तो Formatters.JsonFormatter.SerializerSettings.Converters

6

पर कन्वर्टर्स के डिफ़ॉल्ट सेट करने के लिए इस जोड़ सकते हैं आप MongoDB सी # गुण या मैपर उपयोग करने के साथ ठीक कर रहे हैं, तो आप कुछ इस तरह कर सकते हैं:

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

इस तरह, आप प्रकार को स्ट्रिंग के रूप में सामान्य रूप से (धारावाहिक समेत) के रूप में संदर्भित कर सकते हैं, लेकिन जब मोंगोडीबी इसे क्रमबद्ध करता है, आदि, इसे आंतरिक रूप से ऑब्जेक्ट आईडी के रूप में माना जाता है। यहां क्लास मैप तकनीक का उपयोग कर रहा है:

BsonClassMap.RegisterClassMap<Order>(cm => { 
    cm.AutoMap(); 
    cm.SetIdMember(cm.GetMemberMap(c => c.Id); 
    cm.GetMemberMap(c => c.Id) 
     .SetRepresentation(BsonType.ObjectId); 
}); 
संबंधित मुद्दे