Autor |
Beitrag |
huuuuuh
      
Beiträge: 665
Erhaltene Danke: 19
win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
|
Verfasst: So 28.11.10 16:19
versuche grade, ein objekt in eine XML zu serialisieren. zurzeit verwende ich folgendes: www.c-sharp-library....=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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 28.11.10 16:22
Du benutzt noch exakt den verlinkten Quellcode oder hast Du was an MyClass geändert?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
huuuuuh 
      
Beiträge: 665
Erhaltene Danke: 19
win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 28.11.10 16:47
An der muss es ja dann aber liegen. Zeig doch mal her 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Für diesen Beitrag haben gedankt: huuuuuh
|
|
huuuuuh 
      
Beiträge: 665
Erhaltene Danke: 19
win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
|
Verfasst: So 28.11.10 17:05
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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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?
Für diesen Beitrag haben gedankt: huuuuuh
|
|
huuuuuh 
      
Beiträge: 665
Erhaltene Danke: 19
win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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 
      
Beiträge: 665
Erhaltene Danke: 19
win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
|
Verfasst: 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...
|
|