MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

भंडारण प्रणाली। MongoDb . के साथ टाइप करें

यहाँ System.Type के लिए एक नमूना क्रमांक है जो प्रकार के नाम को BSON स्ट्रिंग के रूप में क्रमबद्ध करता है। इसकी कुछ सीमाएँ हैं कि यदि टाइप नाम सिस्टम प्रकार या एक ही असेंबली में नहीं है, तो Deserialize विधि विफल हो जाती है, लेकिन आप इसके बजाय असेंबली क्वालिफाइडनाम लिखने के लिए इस नमूना सीरिएलाइज़र को ट्वीक कर सकते हैं।

public class TypeSerializer : IBsonSerializer
{
    public object Deserialize(BsonReader reader, Type nominalType, IBsonSerializationOptions options)
    {
        var actualType = nominalType;
        return Deserialize(reader, nominalType, actualType, options);
    }

    public object Deserialize(BsonReader reader, Type nominalType, Type actualType, IBsonSerializationOptions options)
    {
        if (reader.CurrentBsonType == BsonType.Null)
        {
            return null;
        }
        else
        {
            var fullName = reader.ReadString();
            return Type.GetType(fullName);
        }
    }

    public bool GetDocumentId(object document, out object id, out Type idNominalType, out IIdGenerator idGenerator)
    {
        throw new InvalidOperationException();
    }

    public void Serialize(BsonWriter writer, Type nominalType, object value, IBsonSerializationOptions options)
    {
        if (value == null)
        {
            writer.WriteNull();
        }
        else
        {
            writer.WriteString(((Type)value).FullName);
        }
    }

    public void SetDocumentId(object document, object id)
    {
        throw new InvalidOperationException();
    }
}

चाल यह है कि इसे ठीक से पंजीकृत किया जाए। आपको इसे System.Type और System.RuntimeType दोनों के लिए पंजीकृत करने की आवश्यकता है, लेकिन System.RuntimeType सार्वजनिक नहीं है, इसलिए आप इसे अपने कोड में संदर्भित नहीं कर सकते। लेकिन आप Type.GetType का उपयोग करके इसे प्राप्त कर सकते हैं। सीरियलाइज़र को पंजीकृत करने के लिए कोड यहां दिया गया है:

var typeSerializer = new TypeSerializer();
BsonSerializer.RegisterSerializer(typeof(Type), typeSerializer);
BsonSerializer.RegisterSerializer(Type.GetType("System.RuntimeType"), typeSerializer);

मैंने इस परीक्षण लूप का उपयोग यह सत्यापित करने के लिए किया कि यह काम करता है:

var types = new Type[] { typeof(int), typeof(string), typeof(Guid), typeof(C) };
foreach (var type in types)
{
    var json = type.ToJson();
    Console.WriteLine(json);
    var rehydratedType = BsonSerializer.Deserialize<Type>(json);
    Console.WriteLine("{0} -> {1}", type.FullName, rehydratedType.FullName);
}

जहाँ C सिर्फ एक खाली वर्ग है:

public static class C
{
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ubuntu पर MongoDB सामुदायिक संस्करण कैसे स्थापित करें

  2. मानगो में समूह अशक्त मूल्यों को छोड़कर

  3. दिनांक फ़ील्ड पर समूहीकरण के बाद दो तिथियों के बीच लापता महीनों को जोड़ने के लिए MongoDB एकत्रीकरण

  4. Laravel 5.3 . के साथ MongoDB का प्रयोग करें

  5. हैश और आरोही सूचकांकों के बीच मोंगोडब प्रदर्शन अंतर (किसी भी कारण से ऑर्डर नहीं किए गए फ़ील्ड में हैश का उपयोग न करने का कोई कारण?)