Entwickler-Ecke
IO, XML und Registry - serialisieren in XML - Binding-Failure
huuuuuh - So 28.11.10 16:19
Titel: serialisieren in XML - Binding-Failure
versuche grade, ein objekt in eine XML zu serialisieren. zurzeit verwende ich folgendes:
http://www.c-sharp-library.de/viewtopic.php?t=64947&highlight=xml%20serialisieren
Allerdings kommt bei der Zeile
XmlSerializer xs = new XmlSerializer(typeof(MyClass)); die Meldung "Binding-Failure wurde erkannt".
Da ich nirgendwo was brauchbares dazu gefunden hab, hoffe ich mal auf euch...
Christian S. - So 28.11.10 16:22
Du benutzt noch exakt den verlinkten Quellcode oder hast Du was an MyClass geändert?
huuuuuh - So 28.11.10 16:45
MyClass hab ich ersetzt durch eine eigene Klasse. diese Klasse ist aber nicht grundsätzlich anders aufgebaut als MyClass...
Christian S. - So 28.11.10 16:47
An der muss es ja dann aber liegen. Zeig doch mal her :-)
huuuuuh - So 28.11.10 17:05
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160:
| public class Planet {
private PointF orbit_center;
public PointF Orbit_center { get { return orbit_center; } set { orbit_center = value; } } private double orbit_radius;
public double Orbit_radius { get { return orbit_radius; } set { orbit_radius = value; } } private double speed;
public double Speed { get { return speed; } set { speed = value; } } private double orbit_angle = 0; private double self_rotating_speed;
public double Self_rotating_speed { get { return self_rotating_speed; } set { self_rotating_speed = value; } } private PointF self_center;
public PointF Self_center { get { return self_center; } set { self_center = value; } } private PointF position;
public PointF Position { get { return position; } set { position = value; } } private double rotation;
public double Rotation { get { return rotation; } set { rotation = value; } } private string texture_path;
public string Texture_path { get { return texture_path; } set { texture_path = value; } } private double size;
public double Size { get { return size; } set { size = value; } } private bool hasTrabants;
public bool HasTrabants { get { return hasTrabants; } set { hasTrabants = value; } } private Planet[] trabants;
public Planet[] Trabants { get { return trabants; } set { trabants = value; } }
private string name;
public string Name { get { return name; } set { name = value; } }
public void AddTrabant(Planet planet) { List<Planet> planets; try { planets = trabants.ToList<Planet>(); } catch { planets = new List<Planet>(); } planets.Add(planet); trabants = planets.ToArray(); trabants[trabants.Length - 1].Parent = this; }
public Planet() { }
public Planet(Planet parent, string name,PointF orbit_center,double orbit_radius,double speed,double rotatingspeed,string texture_path,double size,bool hasTrabants) { this.parent = parent; this.name = name; this.orbit_center=orbit_center; this.orbit_radius=orbit_radius; this.speed=speed; this.self_rotating_speed=rotatingspeed; this.texture_path=texture_path; this.size = size; this.hasTrabants = hasTrabants; position = new PointF(parent.Position.X + (float)orbit_radius, parent.Position.Y); }
public Planet(Planet parent, string name, PointF orbit_center, double orbit_radius, double speed, double rotatingspeed, string texture_path, double size, bool hasTrabants,PointF position) { this.parent = parent; this.name = name; this.orbit_center = orbit_center; this.orbit_radius = orbit_radius; this.speed = speed; this.self_rotating_speed = rotatingspeed; this.texture_path = texture_path; this.size = size; this.hasTrabants = hasTrabants; this.position = position; }
private Planet parent;
public Planet Parent { get { return parent; } set { parent = value; } }
public void Move() { position.X = (float)(parent.Position.X+(Math.Cos(orbit_angle) * orbit_radius)); position.Y = (float)(parent.Position.Y+(Math.Sin(orbit_angle) * orbit_radius)); orbit_angle += speed; }
public void Rotate() { rotation += self_rotating_speed; } } |
zur Erklärung: es handelt sich um eine eine Klasse, welche die grundsätzlichen Eigenschaften eines Planeten enthält. Ein Beispiiel für die "Planeten" Sonne, Erde und Mond:
Es wird in einer Art Baumstruktur gespeichert. Also so:
Quelltext
1: 2: 3:
| Sonne +-Erde +-Mond |
Dazu hat die Klasse die Eigenschaft "Trabants". Sonne.Trabants[0] wäre die Erde und so weiter...
Ralf Jansen - So 28.11.10 17:50
Kann es sein das du in der IDE das Fangen von stillen Exceptions eingeschaltet hast?
Der XMLSerializer kann auch vorgefertigte Serializer Assemblies verwenden die er bei seiner Erstellung zu laden versucht. Wenn er die nicht findet gibt es die von dir besagte Exception. Das sollte aber egal sein da es eine stille Exception ist.
Mit der Parent Property wirst du ein Problem bekommen da du so für den Serializer eine Rekursion gebastelt hast. Ist die notwendig?
huuuuuh - So 28.11.10 18:06
Visual Studio hatte am Anfang alle Exceptions aus. also hab ich alle angemacht. vermutlich auch stille.
hab jetz mal beim Auftreten der Exception auf "Weiter" geklickt. dann kommt die Exception erst noch einmal, dann kommt zwei Zeilen später eine "InvalidOperationException", die wiederkommt, wenn ich versuche, sie zu überspringen. eine XML-Datei wird nicht erzeugt... Hab auch versucht das Programm außerhalb des Debuggers laufen zu lassen. da kommt auch keine XML-Datei bei raus
Mit der Parent-Property hast du recht. eigentlich brauch ich da nur die Position von Parent... werd das mal ändern
Ralf Jansen - So 28.11.10 18:15
Zitat: |
Visual Studio hatte am Anfang alle Exceptions aus. also hab ich alle angemacht. vermutlich auch stille. |
Die Exception werden dort nicht ein-/ausgeschaltet. Sondern nur wann und wie die vom Debugger behandelt werden. Ich würde dir empfehlen auf die Default Einstellungen zu reseten(auf dem Dialog sollte ein entsprechender Dialog liegen) und die nur temporär zu ändern wenn du einen Verdacht hast das dir was entgeht.
huuuuuh - So 28.11.10 20:20
hoffe mal, jetz funktionierts. BindingFailure war vermutlich was internes vom Serialiser, wie du schon gesagt hast.
jedenfalls wird die XML-Datei jetzt erstellt...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!