How to prevent base class (UserControl) form being serialized

G

Guest

I have a class that is a control derived from UserControl. I want to use
serialization and deserialization with this calss but I get an exception
"Cannot serialize member System.ComponentModel.Component.Site of type
System.ComponentModel.ISite because it is an interface.".

I am not interested in serializing any member from the base class only the
properties in the derived class.

How can I prevent the entire base class from being serialized?


Code snippet

public partial class UserControl1 : UserControl
{
private int item1;
private string item2;


public UserControl1()
{

}

public int Item1
{
get {return item1;}
set {item1 = value;}
}

public string Item2
{
get { return item2; }
set { item2 = value; }
}
}


public partial class Form1 : Form
{
private UserControl1 Uctrl1;
 
P

Peter Rilling

Well, I doubt that you can. There are attributes that will let you
determine what can and cannot be serialized, but you would have to place
them on the code for the UserControl.

Now, let's step back for a moment and talk about design. I imaging you want
to serialize your control so that you can persist it and then reload it at
some later time with a complete state. The base UserControl is part of your
derived control and it would not make sense to reinitialize only your
derived control while leaving the base class un-touched. My suggestion
would be to create a data structure that maintain a copy of all the
information in your control, for instance, if you had name, address, and
phone number, you then might have the following structure.

public struct Person{
Public Name;
Public Address;
Public PhoneNumber;
}

The design principle here is that you decouple the data from the
presentation. That way you can do what you want with the data (store it or
move it as needed) then when you need to reload your control, you simply
initialize the fields with this data. Just serialize this structure rather
than worrying about the whole control.
 
G

Guest

Thanks for the reply.

Ok I get that, but the idea is serializing all public members of an object.
My object happens to be derived from a control so I am penalizes for that.
This makes for more work for maintenance of the code for the object. If I
add public assessors now I must also maintain a struct as well. I was hoping
that there was some way via attributes to force the serializer to ignore the
base class.
 
P

Peter Rilling

If it was possible, what happens when you de-serialize? It is also ignore
the base class so your control won't have a name, know its visibility, know
what parent container owns it, location, etc.
 
G

Guest

Yes, but in the ideal situation you would have control over what is and is
not serialized.

Does anyone from MS have a suggestion on this?
Is there a way in .NET 2.0 to deal with this issue?
 
T

TerryFei

Hi EqDev,
Welcome to MSDN Newsgroup!

Based on object model, when a class derived from other class, base class's
content will be involved in child class. So there is currently no way to do
this, but I will also forward this issue to the relevant team. If there is
any information later, I will inform of you as soon as possible. Thanks for
your understanding. Have a nice day!

Best Regards,

Terry Fei [MSFT]
Microsoft Community Support
Get Secure! www.microsoft.com/security

--------------------
Thread-Topic: How to prevent base class (UserControl) form being serialized
thread-index: AcYr357YOeoId7sFR96a2R1fkmd/+g==
X-WBNR-Posting-Host: 24.249.212.34
From: "=?Utf-8?B?RXFEZXY=?=" <[email protected]>
References: <[email protected]>
<[email protected]>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top