Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Пометил [NonSerialized], а он всёравно ругается


Автор: Kakadu 30.4.2009, 10:24
Есть вот такой класс.
Код

    [Serializable]
    public class Graph {
        #region Private fiels
        [NonSerialized]   
        private GraphDrawer _gDrawer;

        private readonly List<GraphElement> _sons = new List<GraphElement>();

        #endregion    
        #region Properties
        public GraphDrawer Drawer {
            set {
                //if (_gDrawer == null)
                    _gDrawer = value;
            }
        }
        public List<GraphElement> Sons {
            get {
                return _sons;
            }
        }
        #endregion
        #region Public methods
        public void AddSon(GraphElement el) {
            _sons.Add(el);
            if (_gDrawer == null)
                throw new Exception("gDrawer Equals null");
            
            el.PropertyChanged += _gDrawer.Draw;
            _gDrawer.AddGraphElement(el);
        }
        #endregion
    }

Я запускаю его сериализацию, а он гаворит что GraphDrawer не помечен как сериализуемый.
Код

  public class GraphDrawer {
        #region Private fields
        Expect _expected = Expect.None; 
        private readonly Panel _dPanel;
        Reflector reflector;
        private Graph _graph;
        private readonly Dictionary<GraphElement, ShapeControl.ShapeControl> _controls = new Dictionary<GraphElement, ShapeControl.ShapeControl>();
        #endregion

        #region Constructors
        public GraphDrawer(Panel panel) {
            _dPanel = panel;
            reflector = new Reflector(null);
        } 
        #endregion
        
        #region Properties
        public Control PropControl {
            get { return reflector.Container; }
            set {
                reflector.Container = value;
                // Todo: What happens if user will set the same control more then one time?
                reflector.Container.Click += AddMouseClickHandler;
            }
        }



        public Graph Graph {
            set {
                if (_graph == null)
                    _graph = value;
            }
        }
        public Expect Expected {
            get { return _expected; }
            set { _expected = value; }
        }
        #endregion

        #region Private methods
        void AddMouseClickHandler(object sender, EventArgs e) {
            
        }
        #endregion
        #region Public Methods
        public void Draw(object sender, PropertyChangedEventArgs args) {
            Graphics g = Graphics.FromHwnd(_dPanel.Handle);
            g.Clear(Color.GhostWhite);
            
            foreach (GraphElement el in _graph.Sons) {
                
                if (el is Edge) {
                   /* g.FillEllipse(Brushes.YellowGreen,
                        ((Edge)el).Left, ((Edge)el).Top,
                        ((Edge)el).Width, ((Edge)el).Height);

                    g.DrawEllipse(new Pen(Color.Goldenrod, el.BorderWidth),
                                            ((Edge)el).Left, ((Edge)el).Top,
                                            ((Edge)el).Width, ((Edge)el).Height);
                    */
                } else if (el is Vertex) {
                    Vertex v = el as Vertex;
                    if ((v.StartEdge == null) || (v.EndEdge == null))
                        Console.WriteLine("Can't redraw vertex " + v.Id);
                    else
                        g.DrawLine(new Pen(Brushes.Black, v.BorderWidth),
                            v.StartEdge.GetCenterPoint().X, v.StartEdge.GetCenterPoint().Y,
                            v.EndEdge.GetCenterPoint().X, v.EndEdge.GetCenterPoint().Y);
                } else {
                    Console.WriteLine("Nothing");
                }
            }
            
        }
        public void AddGraphElement(GraphElement el) {
            if (el is Edge){
                Edge edge = (Edge)el;
                
                ShapeControl.ShapeControl shape = new ShapeControl.ShapeControl();
                shape.Shape = ShapeControl.ShapeType.Ellipse; 
                
                shape.Width = edge.Width;
                shape.Height = edge.Height;
                shape.Left = edge.Left;
                shape.Top = edge.Top;  
                shape.ForeColor = Color.Blue;
                shape.BorderColor = Color.Red;
                /*shape.Click += delegate {
                    reflector.Extract(edge);
                };
                shape.LocationChanged += delegate {
                    edge.Location = new Point(shape.Left, shape.Top );
                };*/
                
                _controls.Add(edge, shape);
                _dPanel.Controls.Add(shape);
            } 
        }
        #endregion
    }

Автор: -Mikle- 30.4.2009, 10:56
Думаю он ругается на 
public GraphDrawer Drawer {....

Автор: Kakadu 30.4.2009, 11:23
нет, убрать свойство я пробовал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)