2011-06-29 9 views
9

मैं किसी ऑब्जेक्ट को क्रमबद्ध करने के लिए ravendb का उपयोग कर रहा हूं और इसे mstest के माध्यम से परीक्षण कर रहा हूं।RavenDB में ऑब्जेक्ट्स स्टोर करने के लिए मुझे क्या करने की ज़रूरत है?

मैं इस परिणाम हो रही है:

RavenJObject storeMe = RavenJObject.FromObject("errors", new JsonSerializer()); 

: System.ArgumentException: Object serialized to String. RavenJObject instance expected.

यहाँ मेरी कोड

public class Store 
{ 
    private static IDocumentStore store = createStore(); 

    private static EmbeddableDocumentStore createStore() 
    { 
     var returnStore = new EmbeddableDocumentStore(); 
     returnStore.DataDirectory = @"./PersistedData"; 
     returnStore.Initialize(); 
     return returnStore; 
    } 

    public static void Write(string value) 
    { 
     using (var session = store.OpenSession()) 
     { 
      session.Store(value); 
      session.SaveChanges(); 
     } 
    } 
} 

यह मूल कारण लगता है कि कैसे काम करता है RavenJObject यह एक ही त्रुटि फेंकता के रूप में है मैं RavenDB में कस्टम क्रमबद्धता कैसे करूं?

+0

तुम क्यों भंडारण कर रहे हैं बस एक स्ट्रिंग? आप फिर से पूछने का इरादा कैसे कर रहे हैं? आम तौर पर आप एक ऑब्जेक्ट को आईडी और आईडी स्टोर करते हैं। –

+0

मैं वास्तव में एक कस्टम ऑब्जेक्ट को स्टोर करने की कोशिश कर रहा हूं जो सूची से विरासत में है लेकिन मैं अपने कोड के समूह में खींचना नहीं चाहता था। और मुझे लगता है कि अगर मैं स्ट्रिंग केस को समझता हूं तो मुझे पता चलेगा कि मेरा ऑब्जेक्ट क्यों नहीं बचाता है। –

+0

मुझे नहीं लगता कि यह सूची से विरासत में काम करेगा, यदि आप सूची को लपेटते हैं तो यह काम करता है। आपको इससे प्राप्त करने की आवश्यकता क्यों है? –

उत्तर

7

एक वर्ग के साथ कस्टम क्रमांकन ऐसा करने के लिए आप नहीं लिखा था (ताकि आप आरोपित नहीं कर सकता) Newtonsoft.Json.JsonConverter लागू

तो इस तरह इसे पंजीकृत:

using (var session = store.OpenSession()) 
    { 
     session.Advanced.Conventions.CustomizeJsonSerializer = serializer => serializer.Converters.Add(MailAddressJsonConverter.Instance); 
     session.Store(mailAddress); 
     session.SaveChanges(); 
    } 
+2

को लागू करता है, बस एक नोट - मुझे सत्र का उपयोग करना पड़ा। उन्नत। डॉक्यूमेंटस्टोर.कोनेंशन। कस्टमाइज़ जेसनसेरियलाइज़र, सत्र नहीं। उन्नत। रूपांतरण। कस्टमज जेसनसेरियलाइज़र। –

0

कि एक सूची

+0

मैंने इसके लिए एक त्वरित परीक्षण किया और यह अभी भी असफल रहा, मेरी टेस्ट क्लास MyClass का एक उदाहरण संग्रहीत करने का प्रयास कर रहा है: सूची इसके बावजूद विफल रहता है, मैं इसे सीधे पास करता हूं या इसे आपके उदाहरण में लपेटता हूं। कुछ अन्य तकनीकों को आजमाएं और रावेन के बारे में कुछ नया सीखें। –

+0

क्षमा करें मैं प्रश्न को याद करता हूं। मैंने सोचा था कि डेविड ऑब्जेक्ट्स की एक सूची स्टोर करने की कोशिश कर रहा था, न कि ऑब्जेक्ट जो सूची

5

प्रश्न टिप्पणी में हमारे चर्चा के अनुसार के साथ काम करेंगे RavenJArray.FromObject(..) का उपयोग करके देखें, रेवेन वस्तुओं आप नियमित रूप से कक्षाओं में होने के लिए भंडारण कर रहे हैं उम्मीद है, क्या मैं यह मतलब वे JSON एक को क्रमानुसार चाहिए {आईडी: ...} की संरचना।

एक स्ट्रिंग (JSON "...") या एक सूची संग्रहीत (JSON [{}, {}]) सीधे काम करने वाला नहीं है। हालांकि आप इन्हें अपने दस्तावेज़ ऑब्जेक्ट के गुणों के रूप में स्टोर कर सकते हैं।

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

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