2010-03-23 17 views
8
public void Save() { 
      XmlSerializer Serializer = new XmlSerializer(typeof(DatabaseInformation)); 
      /* 
      A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll 
      A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll 
      A first chance exception of type 'System.InvalidOperationException' occurred in System.Xml.dll 
      */ 

      // .... 
    } 

यह वह जगह है पूरी कक्षा आप इसे की जरूरत है:XmlSerializer क्यों एक अवैधऑपरेशन अपवाद फेंक रहा है?

public class DatabaseInformation 
{ 
    /* Create new database */ 
    public DatabaseInformation(string name) { 
     mName = name; 
     NeedsSaving = true; 
     mFieldsInfo = new List<DatabaseField>(); 
    } 

    /* Read from file */ 
    public static DatabaseInformation DeserializeFromFile(string xml_file_path) 
    { 
    XmlSerializer Serializer = new XmlSerializer(typeof(DatabaseInformation)); 
     TextReader r = new StreamReader(xml_file_path); 
     DatabaseInformation ret = (DatabaseInformation)Serializer.Deserialize(r); 
     r.Close(); 
     ret.NeedsSaving = false; 
     return ret; 
    } 

    /* Save */ 
    public void Save() { 
    XmlSerializer Serializer = new XmlSerializer(typeof(DatabaseInformation)); 
     if (!mNeedsSaving) 
      return; 

     TextWriter w = new StreamWriter(Path.Combine(Program.MainView.CommonDirectory.Get(), Name + ".xml"), false); 
     Serializer.Serialize(w, this); 
     w.Close(); 
     NeedsSaving = false; 
    } 

    private string mName; 
    public string Name { get { return mName; } } 

    private bool mNeedsSaving; 
    public bool NeedsSaving { get { return mNeedsSaving; } set { mNeedsSaving = value; Program.MainView.UpdateTitle(value); } } 

    private bool mHasId; 
    public bool HasId { get { return mHasId; } } 

    List<DatabaseField> mFieldsInfo; 
} 

(पुनश्च: अगर आप किसी भी सुझाव है मेरी कोड में सुधार करने के साझा करने के लिए स्वतंत्र लग रहा है, मैं एक सी # शुरुआत कर रहा हूँ)

+0

क्या आप यहां अपवाद संदेश पेस्ट कर सकते हैं? –

+1

कृपया आंतरिक अपवादों सहित पूर्ण अपवाद जानकारी पोस्ट करें - और अनुसार दस्तावेज ग्रंथ (यानी संदेश)। आप वास्तव में उस संदेश को याद करते हैं जिसमें अक्सर अधिक जानकारी होती है। – TomTom

उत्तर

13

अपने प्रकार को क्रमबद्ध/deserialize करने के लिए यह पैरामीटर रहित कन्स्ट्रक्टर की जरूरत है। here की जाँच करें:

एक वर्ग एक डिफ़ॉल्ट निर्माता XmlSerializer द्वारा धारावाहिक जा करने के लिए होना चाहिए।

+6

मेरे प्रकार में पैरामीटर रहित कन्स्ट्रक्टर है और मुझे अभी भी यह त्रुटि मिली है। यह पता चला कि कारण यूरी के साथ एक सार्वजनिक संपत्ति थी जिसमें पैरामीटर रहित कन्स्ट्रक्टर नहीं था। तो आपके प्रकार के अलावा, उस प्रकार के आपके सार्वजनिक गुणों में भी पैरामीटर रहित कन्स्ट्रक्टर होना चाहिए। – user850010

+0

मेरा दिन बचाया !!! – Leviathan

+0

जब मैंने इस अपवाद को पकड़ा और इसके साथ जुड़े इंनेरएक्सप्शन के कई स्तरों की जांच की, तो मुझे पता चला कि मेरे नेस्टेड ऑब्जेक्ट्स में से एक सदस्य का सदस्य था जिसका प्रकार एक इंटरफ़ेस (आईनेमरेबल) है और यह क्रमबद्ध नहीं है। मुझे लगता है मुझे इसे एक ठोस प्रकार में परिवर्तित करना होगा। – Neek

6

ओह .. मैं यह अतिरिक्त जानकारी के लिए किया था पता नहीं था, रहस्य सुलझ (क्लिक करना पड़ता था "देखें विस्तार .."):

संदेश = SDB.DatabaseInformation धारावाहिक नहीं किया जा सकता क्योंकि यह पैरामीटर रहित कन्स्ट्रक्टर नहीं है।

0

आप एक डिफ़ॉल्ट कन्स्ट्रक्टर प्रदान करके इसे प्राप्त कर सकते हैं जो अधिभारित कन्स्ट्रक्टर को कॉल करता है। उदाहरण के लिए:

public DatabaseInformation() : this ("defaultName"){} 
1

मुझे यह अपवाद भी मिल रहा था, लेकिन यह एक डिफ़ॉल्ट कन्स्ट्रक्टर गायब होने के कारण नहीं था। मेरे पास कुछ अतिरिक्त गुण थे (List और Dictionary) जो XML दस्तावेज़ का हिस्सा नहीं हैं।

[XmlIgnore] के साथ उन गुणों को सजाते हुए मेरे लिए समस्या हल हो गई।

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