मुझे उन प्रकार की सूची मिली है जिन्हें मुझे फ़ाइल में सहेजने और इसे पढ़ने के बाद की आवश्यकता है। मैं DataContractSerializer
का उपयोग, लेकिन मैं अक्रमांकन दौरान एक अपवाद प्राप्त करें:सिस्टम को क्रमबद्ध/deserialize.RuntimeType
तर्कों (SerializationInfo, StreamingContext) ISerializable "System.RuntimeType" में साथ निर्माता नहीं मिल सकी।
मैंने System.RuntimeType
को मेरे सीरिएलाइज़र के ज्ञात प्रकार के रूप में जोड़ा है, लेकिन इससे मदद नहीं मिली।
यहाँ मेरी दो तरीकों में से कोड है
public static void SaveTypes(List<Type> types, string fileName)
{
Type rt = types[0].GetType();
List<Type> knownTypes = new List<Type>() { rt }; //I get a List with System.RuntimeType item here
DataContractSerializer serializer = new DataContractSerializer(typeof(List<Type>), knownTypes);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
Stream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
using (XmlWriter xw = XmlWriter.Create(fs, settings))
serializer.WriteObject(xw, types);
}
क्रमबद्धता ठीक से काम करने लगता है, और आउटपुट फ़ाइल ठीक है, लेकिन समस्या यह deserializing पर शुरू होता है:
public static object LoadTypes(string fileName)
{
Stream file = new FileStream(fileName, FileMode.Open, FileAccess.Read);
byte[] data = new byte[file.Length];
file.Read(data, 0, (int)file.Length);
Type rt = file.GetType();
List<Type> knownTypes = new List<Type>() { rt.GetType() };
DataContractSerializer deserializer = new DataContractSerializer(typeof(List<Type>), knownTypes);
Stream stream = new MemoryStream();
stream.Write(data, 0, data.Length);
stream.Position = 0;
return deserializer.ReadObject(stream); //exception here
}
वहाँ के माध्यम से जाना कोई तरीका है इस? या शायद प्रकारों को स्टोर करने का कोई और तरीका है?
आपको ** डेटा ** को क्रमबद्ध करना चाहिए, कार्यान्वयन नहीं। ए 'टाइप' कार्यान्वयन के बारे में 100% है। वाकई, यह जाने का गलत तरीका है, और यह उस अंधेरे रास्ते को आगे बढ़ाने में आपकी मदद करने के लिए एक अक्षमता होगी। IMO। –
मैं डेटा को क्रमबद्ध करता हूं, लेकिन इसमें उपयोगकर्ता परिभाषित प्रकार शामिल हैं जिन्हें मैं एक्सेस नहीं कर सकता। तो जब मैं उन्हें deserialize मैं उन प्रकारों को जानने की जरूरत है। मैंने सोचा कि उन्हें एक्सेस करने का एकमात्र तरीका उन्हें फाइल में स्टोर करना है। –