Desidero serializzare un oggetto. Ho questa struttura di classe base:C# Serializzazione di classi nidificate
class Controller
{
Clock clock;
public event EventHandler<ClockChangedEventArgs> ClockChanged;
public void serializeProperties()
{
using (FileStream stream = new FileStream(PROPERTIES_FILE, FileMode.Append, FileAccess.Write, FileShare.Write))
{
IFormatter formatter = new BinaryFormatter();
try
{
formatter.Serialize(stream, clock);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
public void deserializeProperties()
{
using (FileStream stream = new FileStream(PROPERTIES_FILE, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read))
{
IFormatter formatter = new BinaryFormatter();
try
{
clock = (Clock)formatter.Deserialize(stream);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
clock = new Clock();
}
finally
{
clock.ClockChanged += new EventHandler<ClockChangedEventArgs>(clock_ClockChanged);
}
}
}
}
La classe Clock è definita in questo modo:
[Serializable]
public class Clock
{
ClockProperties[] properties;
int current;
bool isAnimated;
public event EventHandler<ClockChangedEventArgs> ClockChanged;
public Clock()
{
properties = new ClockProperties[2];
properties[0] = new ClockProperties("t1");
properties[1] = new ClockProperties("t2");
properties[0].ValueChanged += new EventHandler(Clock_ValueChanged);
properties[1].ValueChanged += new EventHandler(Clock_ValueChanged);
}
}
I ClockProperties sottostanti:
[Serializable]
public class ClockProperties
{
public event EventHandler ValueChanged;
int posX, posY;
string clock;
public ClockProperties(string name)
{
clock = name;
}
public void OnValueChanged(EventArgs e)
{
if (ValueChanged != null)
{
ValueChanged(this, e);
}
}
public string Clock
{
get { return clock; }
set {
if (!value.Equals(clock))
{
clock = value;
OnValueChanged(EventArgs.Empty);
}
}
}
public int PosX
{
get { return posX; }
set {
if (!(value == posX))
{
posX = value;
OnValueChanged(EventArgs.Empty);
}
}
}
public int PosY
{
get { return posY; }
set {
if (!(value == posY))
{
posY = value;
OnValueChanged(EventArgs.Empty);
}
}
}
}
quando provo a serializzare l'oggetto Clock
con la matrice inclusa di ClockProperties
, ottengo un'eccezione che lo Controller
non è contrassegnato come serializzabile. Onestamente, non capisco perché. Presupposi che serializzo solo l'oggetto Clock
e pertanto contrassegno solo tale classe e lo come Serializable
. Mi sto perdendo qualcosa?
Grazie, ho provato '[NonSerialized]', mentre mi sono imbattuto in esso. Non conoscevo questa sintassi '[field: NonSerialized]'. Funziona ora come previsto. – rdoubleui
Bello, non lo sapevo. – Svish