Существует различие между двоичной сериализацией и сериализацией xml
Двоичная сериализация
Ваш примерный класс не даст проблемы в двоичной сериализации. Это даже не приведет к проблемам, если ваш класс будет иметь два поля, которые имеют отношение друг к другу:
class BinaraySerializationProblem
{
private int x = 0;
private int doubleX = 0;
// etc. Methods that change x and doubleX
}
Пока вы заботитесь об отношении между x и doubleX, двоичная сериализация не будет
Однако иногда вы не хотите, чтобы некоторые элементы были сериализованы по соображениям эффективности:
[Serializable]
class MyImage
{
private string imageFileName = null;
private BitMap loadedImage = null;
// etc. Methods to change imageFileName and load the image
}
При сериализации этого кода вы, вероятно, не хотите сохранить растровое изображение, потому что его можно воссоздать, прочитав файл. В этом случае вы добавите атрибут [NonSerialized] в поле (а не свойство!) [/ G7]
[Serializable]
class MyImage
{
private string imageFileName = null;
[NonSerialized]
private BitMap loadedImage = null;
// etc. Methods to change imageFileName and load the image
}
[Сериализуемое] и [NonSerialized] можно найти в пространстве имен System
Сериализация XML
При сохранении XML все значения ToString () всех общедоступных и доступных для записи атрибутов сериализуются.
Таким образом, в случае XML оба значения ExecutionTime и ExecutionTimeSeconds будут сохранены.
Если вы не хотите, чтобы свойство сериализовалось, используйте атрибут [XmlIgnore]. Измените свой класс следующим образом:
[Serializable]
public class MyClass
{
private TimeSpan executionTime = TimeSpan.FromSeconds(0.0);
[System.Xml.Serialization.XmlIgnore]
public TimeSpan ExecutionTime
{
get {return executionTime;}
set {executionTime = value;}
}
public double ExecutionTimeSeconds
{
get {return executionTime.TotalSeconds;}
set {executionTime = TimeSpan.FromSeconds(value);}
}
}
Это приводит к тому, что значение свойства ExecutionTime не сериализуется, а только значение ExecutionTimeSeconds.
Кстати, что класс TimeSpan не является сериализуемым для XML, поэтому, если вам нужно сериализовать временной интервал xml, необходимо добавить свойство [XmlIgnore] и создать дополнительное свойство для сохранения TimeSpan в сериализуемом формате (секунды / мсек / часы / и т. д.).