2011-07-31 12 views
7

(नोट: डिक्शनरी जहां टी कुछ प्रोटोकंट्रैक्ट/प्रोटोमेम्बेड क्लास ठीक काम करता है।) यह समस्या केवल मेरे लिए टाइप ऑब्जेक्ट के साथ होती है।प्रोटोबफ-नेट में एक शब्दकोश <स्ट्रिंग, ऑब्जेक्ट> को क्रमबद्ध करना

मैं शब्दकोश के शब्दकोश का एक शब्दकोश क्रमबद्ध करने की कोशिश कर रहा था।

टाइपऑफ (ऑब्जेक्ट) काम नहीं करता है। इसे होना चाहिए? क्या मुझे एक स्ट्रिंग आधारित काम को चारों ओर लागू करना चाहिए?

इस परिदृश्य में, ऑब्जेक्ट केवल एक .net आदिम होगा।

[Test] 
    public void De_SerializeObjectDictionary2() 
    { 
     var d = new Dictionary<string, object>(); 

     d.Add("abc", 12); 

     var ms = new MemoryStream(); 

     var model = ProtoBuf.Meta.RuntimeTypeModel.Default; 
     //model.AutoAddMissingTypes = true; 
     //model.AutoCompile = true; 
     //model.InferTagFromNameDefault = true; 
     //model.Add(typeof (object), false); 
     //model.Add(typeof(Int32), true); 
     //model[typeof (object)].AddSubType(50, typeof (Int32)); 

     model.Serialize(ms, d); 
     Serializer.Serialize<Dictionary<string,object>>(ms, d); 
     // <--- No serializer defined for type: System.Object 

     // or 
     //model.Add(typeof (object), false); 
     //Serializer.Serialize<Dictionary<string, object>>(ms, d); 
     //<-- Unexpected sub-type: System.Int32 
     ms.Position = 0; 

     var d2 = Serializer.Deserialize<Dictionary<string, object>>(ms); 
    } 

मैं समय से आगे इन प्रकार परिभाषित करने का प्रयास ... लेकिन मैं वे Protobuf शुद्ध

 //model.Add(typeof (object), false); 
     //model[typeof (object)].AddSubType(50, typeof (Int32)); 
     /* 
     //model.Add(typeof(int), false); 
     //model.Add(typeof(string), false); 
     //model.Add(typeof(short), false); 
     //model.Add(typeof(DateTime), false); 
     //model.Add(typeof(long), false); 
     //model.Add(typeof(bool), false); 
     //model.Add(typeof(int[]), false); 
     //model.Add(typeof(string[]), false); 
     //model.Add(typeof(short[]), false); 
     //model.Add(typeof(DateTime[]), false); 
     //model.Add(typeof(long[]), false); 
     //model.Add(typeof(bool[]), false); 

     //model.Add(typeof(int?), false); 
     //model.Add(typeof(short?), false); 
     //model.Add(typeof(DateTime?), false); 
     //model.Add(typeof(long?), false); 
     //model.Add(typeof(bool?), false); 
     //model.Add(typeof(int?[]), false); 
     //model.Add(typeof(short?[]), false); 
     //model.Add(typeof(DateTime?[]), false); 
     //model.Add(typeof(long?[]), false); 
     //model.Add(typeof(bool?[]), false); 

     //model.Add(typeof(byte[]), false); 
     //model.Add(typeof(byte), false); 
+0

क्या आप समय के सभी संभावित प्रकारों को जानते हैं? यहां कितने प्रकार हैं? –

+0

शब्दकोश serializable शब्दकोश में सभी प्रकार हैं? –

+0

हां। यहां उन प्राइमेटिव्स हैं जिन्हें मैंने आजमाया। वे सभी एक त्रुटि का कारण बनते हैं। मुझे लगता है कि वे पहले ही प्रोटोबफ-नेट लाइब्रेरी द्वारा परिभाषित हैं। – sgtz

उत्तर

4

इस सीधे पहले से ही करने की इच्छा से डिफ़ॉल्ट रूप से संभाला रहे हैं लगता है प्रस्तावित किया गया है, और मेरी सूची में देखने के लिए है, लेकिन: विरासत के हिस्से के रूप में इनबिल्ट सीरियलाइजेशन (इंट इत्यादि) के साथ प्रकार के उपचार के कुछ तकनीकी मुद्दे हैं जो बहुत रोचक नहीं हैं। मेरी सिफारिश यहां जेनेरिक कंक्रीट कार्यान्वयन के साथ एक सार आधार वर्ग का उपयोग करना है, और आधार-प्रकार पर एक "शामिल" विशेषता रनटाइम पर प्रत्येक अपेक्षित प्रकार को उद्धृत करने के लिए - Foo<int>, Foo<string> इत्यादि। डायनामिक टाइप भी यहां पर विचार करेगा, लेकिन कुछ मामूली tweaks के बिना मुझे नहीं लगता कि यह तुरंत शब्दकोश के लिए काम करता है। हालांकि, यह कर सकता है।

+0

+1 ty। हाँ। वह ठीक काम करेगा। सलाह के लिये धन्यवाद। – sgtz

संबंधित मुद्दे

 संबंधित मुद्दे