Условная двоичная сериализация C # - PullRequest
1 голос
/ 06 сентября 2010

Я использую BinaryFormatter для сериализации класса и его переменных по условию.Например:

[Serializable]
public class Class1
{
private Class2 B;
...
}

[Serializable]
public class Class2{...}

Я хочу, чтобы переменная B сериализовалась только при удаленном взаимодействии, но не при сериализации в хранилище файлов.Вопросы:
1) Я знаю, что в XmlSerialization мы можем использовать [XmlIgnore] и {PropertyName} Specified для условного игнорирования свойства.Это эквивалентный метод для [NonSerialized]?
2) Для класса с атрибутом [Serializable], как его игнорировать во время выполнения?

Ответы [ 3 ]

0 голосов
/ 06 сентября 2010
  1. Как уже упоминалось, его не существует.Вы можете закодировать свой выход, хотя он немного запутан (то есть если вы не хотите реализовывать интерфейс ISerializable, как уже предлагалось).не игнорируй это.Вы можете изменять свойства атрибутов только во время выполнения, а поскольку атрибут NonSerialized не принимает аргумент истина / ложь, вы ничего не можете с этим сделать во время выполнения.

0 голосов
/ 08 марта 2013

Я написал довольно простую, но расширяемую среду для решения такого рода проблем с помощью привязок. Не уверен, что полностью понимаю, но это возможно:

public class Class1
{
  [Ignore]
  public bool IsRemoting { get; set; }

  [SerializeWhen("IsRemoting", true)]
  public Class2 B;
}

http://binaryserializer.codeplex.com

0 голосов
/ 06 сентября 2010
  1. Нет такого метода. Вы можете управлять сериализацией, используя ISerializable, и если вы это сделаете, вы будете знать, какой контекст сериализации активен (удаленное взаимодействие, файл и т.
  2. AFAIK нет способа сделать это, зачем тебе это?

Вообще говоря, я советую вам не использовать BinaryFormatter. Это головная боль обслуживания, если когда-либо была одна. Используйте XML-сериализацию или какие-то буферы протокола.

...