UserControl collection pas marqué comme sérialisable

Je doit manquer quelque chose de vraiment évident. Je suis tout à fait novice en C#, mais ont été la programmation en C/C++ depuis des années, donc désolé si c'EST quelque chose saute aux yeux 😉

[Voir Éditer de nouveaux problèmes]

Je suis en train de créer un nœud contenant un UserControl. J'ai le Contrôle figurant dans le WinForm designer et je peux ajouter des nœuds. Cependant lorsque j'essaie d'exécuter le code que j'obtiens l'erreur suivante:

La génération de Code pour la propriété 'Noeuds' a échoué. L'erreur était: 'Type
App.Le nœud " dans l'Assembly 'App, version=1.0.0.0, Culture=neutral,
PublicKeyToken=null " n'est pas marqué comme sérialisable.

et puis aucun des nœuds, j'ai ajouté montrer.

Cela commence à me rendre fou, aussi loin que je peux voir, il EST marqué comme sérialisable.

Le nœud est défini comme suit:

[Serializable]
public class Node : MarshalByRefObject
{
    public Node()
    {
    }

    public Node( String text )
    {
        this.Text       = text;
        this.Checked    = false;
        this.Complete   = false;
    }

    public String       Text        { get; set; }
    public bool         Checked     { get; set; }
    public bool         Complete    { get; set; }
    public bool         Selected    { get; set; }
};

J'ai ensuite définir une "Collection" comme suit:

[Serializable]
public class NodeCollection : List< Node >
{
    public NodeCollection() :
        base()
    {
    }
};

À la fois la collecte et le nœud lui-même ont la "Serializable" ensemble d'attributs comme vous pouvez le voir.

La propriété des éléments mentionnés dans l'erreur est définie comme suit

    private NodeCollection      mNodes  = new NodeCollection();

    [Category( "Behavior" )]
    [Description( "Nodes" )]
    public NodeCollection Nodes
    { 
        get
        {
            return mNodes;
        }
    }

Donc, quiconque a une idée de ce que je fais mal?

Edit: En réponse à Archeg les commentaires c'est mon UserControl:

public partial class Control : UserControl
{
public Control()
{
InitializeComponent();
}
protected override void OnPaint( PaintEventArgs pe )
{
Graphics graph  = pe.Graphics;
int rowHeight   = Font.Height + 2;
if ( Nodes != null )
{
int yPos    = 0;
foreach( Node node in this.Nodes )
{
//Calculate my various bounding boxes.
Rectangle nodeBounds    = new Rectangle( Bounds.Left, yPos, Bounds.Width, rowHeight );
Rectangle lightBounds   = new Rectangle( Bounds.Right - Font.Height, yPos, rowHeight, rowHeight );
Rectangle spannerBounds = new Rectangle( lightBounds.Left - Font.Height, yPos, rowHeight, rowHeight );
Rectangle checkBoxBound = new Rectangle( 32, yPos, rowHeight, rowHeight );
Rectangle textBounds    = new Rectangle( checkBoxBound.Right, yPos, Bounds.Width - (rowHeight * 2) - checkBoxBound.Right, rowHeight );
//Draw selection box.
Brush textColour    = Brushes.Black;
if ( node.Selected )
{
graph.FillRectangle( Brushes.Blue, nodeBounds );
textColour      = Brushes.Yellow;
}
//Draw node text.
graph.DrawString( node.Text, Font, textColour, textBounds );
//Draw Red/Green light
Image[] lightImages = new Image[] { CompleteLightImage, InCompleteLightImage };
Image lightImage    = lightImages[node.Complete ? 1 : 0];
if ( lightImage != null )
{
graph.DrawImage( lightImage, lightBounds );
}
//Draw Spanner Icon
if ( SettingsImage != null )
{
graph.DrawImage( SettingsImage, spannerBounds );
}
//Draw check box.
VisualStyleRenderer renderer    = null;
VisualStyleElement  ve          = node.Checked ? VisualStyleElement.Button.CheckBox.CheckedPressed : VisualStyleElement.Button.CheckBox.CheckedNormal;
if (VisualStyleRenderer.IsElementDefined( ve ))
{
renderer = new VisualStyleRenderer( ve );
}
if ( renderer != null )
{
renderer.DrawBackground( graph, checkBoxBound );
}
else
{
ControlPaint.DrawCheckBox( graph, checkBoxBound, node.Checked ? ButtonState.Checked : ButtonState.Normal );
}
yPos    += Font.Height;
}
}
}
private NodeCollection      mNodes  = new NodeCollection();
[Category( "Behavior" )]
[Description( "Nodes" )]
[DesignerSerializationVisibility( DesignerSerializationVisibility.Content )]
[MergableProperty( false )]
[Bindable( false )]
public NodeCollection Nodes
{ 
get
{
return mNodes;
}
}
public Image CompleteLightImage         { get; set; }
public Image InCompleteLightImage       { get; set; }
public Image SettingsImage              { get; set; }
}

J'ai fait quelques modifications depuis que j'ai posté généralement relatives à la "DesignerSerializationVisibility" attribut qui a aidé, mais je suis maintenant l'erreur de génération suivante:

erreur MSB3103: Invalid fichier Resx. Impossible de charger le type d'Application.Nœud, App,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, qui est utilisé dans
l' .Fichier RESX. S'assurer que les références ont été ajoutées
pour votre projet.

Edit 2: il est intéressant de noter que mes problèmes se produisent uniquement lorsque j'ai ajouter un groupe de Nœuds dans le concepteur puis-je obtenir la ci-dessus Resx erreur. Si j'ajoute les nœuds manuellement à partir de code alors qu'il fonctionne tout comme je m'attends à ...

Quel contrôle avez-vous utiliser? Est-il personnalisé?
Yup son totalement personnalisé, directement dérivé de UserControl
Vous pouvez poster votre code UserControl?
Ajout d'un code et légèrement mis à jour avec mes dernières questions ...

OriginalL'auteur Goz | 2012-03-20