UserControl-Sammlung nicht als serialisierbar markiert

7

Ich muss etwas wirklich Offensichtliches vermissen. Ich bin ziemlich neu in C #, habe aber seit Jahren in C / C ++ programmiert, es tut mir leid, wenn es etwas offensichtlich ist;)

[Siehe Bearbeiten für neuere Probleme]

Ich versuche einen Knoten zu erstellen, der UserControl enthält. Ich habe das Steuerelement im WinForm-Designer angezeigt und ich kann Knoten hinzufügen. Wenn ich jedoch versuche, den Code auszuführen, erhalte ich den folgenden Fehler:

  

Die Codegenerierung für die Eigenschaft 'Knoten' ist fehlgeschlagen. Fehler war: 'Geben Sie ein   App.Node 'in Assembly' App, Version = 1.0.0.0, Kultur = neutral,   PublicKeyToken = null 'ist nicht als serialisierbar markiert.

und dann keiner der Knoten, die ich hinzugefügt habe, erscheint.

Das fängt an mich wütend zu machen, denn soweit ich sehen kann, ist es als serialisierbar gekennzeichnet.

Der Knoten ist wie folgt definiert:

%Vor%

Ich definiere dann eine "Sammlung" wie folgt:

%Vor%

Sowohl die Sammlung als auch der Knoten selbst haben das Attribut "Serializable", wie Sie sehen können.

Die Nodes-Eigenschaft, die im Fehler erwähnt wird, ist wie folgt definiert:

%Vor%

Hat also jemand eine Idee, was ich hier falsch mache?

Bearbeiten: Als Antwort auf Archegs Kommentare ist dies mein UserControl:

%Vor%

Ich habe einige Änderungen vorgenommen, seit ich ursprünglich allgemein auf das "DesignerSerializationVisibility" -Attribut hingewiesen habe, das geholfen hat, aber ich bekomme jetzt den folgenden Erstellungsfehler:

  

Fehler MSB3103: Ungültige Resx-Datei. Der App.Node, App,   Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null, das in verwendet wird   die .RESX-Datei. Stellen Sie sicher, dass die erforderlichen Referenzen hinzugefügt wurden   zu deinem Projekt.

Edit 2 : Es ist erwähnenswert, dass meine Probleme nur auftreten, wenn ich einen Haufen Knoten im Designer hinzufüge, dann bekomme ich den obigen Resx-Fehler. Wenn ich die Knoten manuell aus dem Code hinzufüge, funktioniert alles wie erwartet ...

    
Goz 20.03.2012, 14:49
quelle

2 Antworten

18

Ich glaube, dass Sie dieses Problem haben, da Designer automatisch versucht, alle öffentlichen UserControl-Eigenschaften zu serialisieren. Wenn diese Eigenschaft nicht für die benutzerdefinierte UserControl-Entwurfszeitunterstützung benötigt wird, können Sie das Attribut "DesignerSerializationVisibility" hinzufügen:

%Vor%

oder lassen Sie einfach die Methoden get{} und set{} der Eigenschaft weg und verwenden Sie sie als öffentliches Feld.

Ich hoffe, es hilft!

    
Rzassar 26.06.2012, 04:25
quelle
2

Das ist sehr seltsam. Ich habe es lokal auf meiner Notiz reproduziert, dann die Node-Klasse in ein anderes Projekt verschoben und es hat funktioniert. Ich denke, es ist etwas mit zirkulären Abhängigkeiten - es versucht, Ihre Assembly zu finden (in meinem Fall war es WindowsFormsApplication1), aber es kann nicht, wie es gerade jetzt baut.

Ich hoffe, dass Ihnen das weiterhilft, und ich werde versuchen, weiter zu graben.

Aktualisieren Eine weitere Lösung: Entfernen Sie das [Serialization] -Attribut aus der Node-Klasse. In diesem Fall werden Sie VS erzwingen, anstatt Knoteninhalte in der resx-Datei zu erzeugen, erzeugen Sie einfach solchen Code:

%Vor%     
Archeg 20.03.2012 15:54
quelle