Подтвердить что ты не робот

Игнорировать двоичную сериализацию в свойстве

У меня есть обычный С# POCO. На уровне класса я украшаю объект [Serializable()].

Тем не менее, я использую Linq Sum() для одного из свойств, и я получаю сообщение об ошибке при сериализации. Если возможно, я просто просто проигнорирую это свойство. Однако [XmlIgnore()] предназначен только для Xml Serialization, а не для двоичного. Любые идеи или мысли?

Код - это что-то вроде этого, где я хотел бы игнорировать ValueTotal:

[Serializable()]
public class Foo
{
  public IList<Number> Nums { get; set; }

  public long ValueTotal
  {
    get { return Nums.Sum(x => x.value); }
  }
}
4b9b3361

Ответ 1

Обмануть и использовать метод

[Serializable()]
public class Foo
{
  public IList<Number> Nums { get; set; }

  public long GetValueTotal()
  {
    return Nums.Sum(x => x.value);
  }
}

Ответ 2

ValueTotal уже игнорируется. Только данные сериализуются, а не методы. Свойства - это методы на самом деле.

Если вы хотите игнорировать поля, а не сериализовывать их, отметьте их как [NonSerialized].

'Или'

вы можете реализовать ISerializable и не сериализовать это поле.

Вот пример кода, который может реализовать ISerializable и сериализовать данные: http://www.c-sharpcorner.com/UploadFile/yougerthen/102162008172741PM/1.aspx

Ответ 3


    [NonSerialized]
    private IList<Number> nums;
    public IList<Number> Nums { get {return nums;} set { nums = value; }  } 

Ответ 4

Существует другой способ, который не указан здесь, который имеет некоторые преимущества (приведенный ниже код был предназначен для поддержки как двоичной сериализации, так и xml) (для вашего примера вам понадобится настраиваемый класс для сериализации ваших интерфейсов):

    [OnSerializing]
    private void OnSerializing(StreamingContext context)
    {
        xmlShape4Port = new xmlStreamShape(shape4Port);
        shape4Port = null;
    }
    [OnDeserialized]
    private void OnDeserialized(StreamingContext context)
    {
        if (xmlShape4Port != null)
        {
            shape4Port = xmlShape4Port.getShapeFromSaved();
            xmlShape4Port = null;
        }
    }

    [XmlIgnore()]
    public virtual StreamShape shape4Port {get;set;}

    [XmlElement("shape4Port")]
    public xmlStreamShape xmlShape4Port
    {
        get
        {
            if (shape4Port == null)
                return null;
            else
            {
                return new xmlStreamShape(shape4Port);
            }
        }
        set
        {
            shape4Port = value.getShapeFromSaved();
        }
    }