JS получить HTML указатель данных из другой функции

Существует различие между двоичной сериализацией и сериализацией xml

  • Двоичная сериализация (de) сериализует все (общедоступные и не общедоступные) поля
  • стандартная сериализация XML (de) сериализует общедоступные и доступные для записи свойства

Двоичная сериализация

Ваш примерный класс не даст проблемы в двоичной сериализации. Это даже не приведет к проблемам, если ваш класс будет иметь два поля, которые имеют отношение друг к другу:

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 в сериализуемом формате (секунды / мсек / часы / и т. д.).

0
задан Omega Doe 25 February 2015 в 11:47
поделиться