Laden...

Problem beim XML-Serialisieren einer privaten Klasse

Letzter Beitrag vor 19 Jahren 4 Posts 1.631 Views
Problem beim XML-Serialisieren einer privaten Klasse

Hallo Leute,

ich kriege beim serialiseren einer privaten Klasse einen Laufzeitfehler beim Konstruktor-Aufruf von XmlSerializer. Das Framework beschwert sich das ein Assembly nicht gefunden werden kann. der Datei oder Assemblyname ist total kryptisch, wird von mir nicht verwendet und ändert sich auch bei jedem Versuch.

Mache ich die Klasse public ist alles OK.

Mein Code sieht so aus:

	
public class MyPublic {  		
    private class MyConfig {
         public string irgendwas = "";
         public string nochwas = "nochwas";
     }    		

     public void SaveConfig(){

         XmlSerializer aXmlSer = new XmlSerializer(typeof(MyConfig));  
         ....


Kan mir jemand vielleicht sagen warum es kracht?


Gruß
Uwe

.

Hallo,

ich versuch mal zu helfen.

In der MSDN steht:
Die XML-Serialisierung ist die Konvertierung der öffentlichen Eigenschaften und Felder eines Objekts in ein serielles Format (in diesem Fall XML) zum Zweck der Speicherung und Übermittlung.

Da also nur öffentliche Eigenschaften und Felder eines Objektes verwendet werden, denke ich, dass die Klasse auch öffentlich sein muss.

BTW es wäre hilfreich die Fehlermeldung zu posten.

Ich hoffe ich konnte helfen,
Bakunin

Hallo Bakunin,

zuerst mal Danke für den Hilfe-Versuch.

Die XML-Serialisierung ist die Konvertierung der öffentlichen Eigenschaften und Felder eines Objekts in ein serielles Format (in diesem Fall XML) zum Zweck der Speicherung und Übermittlung.

Da also nur öffentliche Eigenschaften und Felder eines Objektes verwendet werden, denke ich, dass die Klasse auch öffentlich sein muss.

Würde ich nicht ausschließen, aber es steht halt nicht drin das das Object öffentlich sein muss.

Hier der Fehlercode:

Eine nicht behandelte Ausnahme des Typs 'System.IO.FileNotFoundException' ist in mscorlib.dll aufgetreten. Zusätzliche Informationen: Datei- oder Assemblyname 'ytf_pr9z.dll' oder eine Abhänigkeit davon wurde nicht gefunden.

Wobei der Datei- bzw. Assemblyname jedesmal anders lautet, aber immer so unsinnig aussieht aus hätte sich den jemand irgendwo aus dem Speicher geholt.


Gruß
Uwe

.

Ich habe das ganze mal getestet.

Hier der code:


using System;
using System.IO;
using System.Xml.Serialization;

class MainClass
{
	public static void Main(string[] args)
	{
		MeineKlasse x = new MeineKlasse();
		x.s_ = "test";
		x.i_ = 1000;
		TextWriter txt = new StreamWriter("/tmp/datenfile.xml");
		XmlSerializer  serial = new XmlSerializer(typeof(MeineKlasse));
		serial.Serialize(txt, x);
		txt.Close();
		
		FileStream fs_read = new FileStream("/tmp/datenfile.xml", FileMode.Open);
		MeineKlasse y = (MeineKlasse) serial.Deserialize(fs_read);
		fs_read.Close();
	}
}

[Serializable]
class MeineKlasse{
	private string s;
	private int i;
	
	public string s_	{	get{	return this.s;	}	set{	this.s = value;	}	}
	public int i_		{	get{	return this.i;	}	set{	this.i = value;	}	}
}

dabei bekomme ich folgende Fehlermeldung:

System.InvalidOperationException: MeineKlasse is inaccessible due to its protection level. Only public types can be processed

Ich finde aber nirgends eine Doku in der steht, dass nur öffentliche Klassen serialisiert werden können.

Bakunin