Как вы должны реализовать сериализацию? (интерфейс / соглашение мудрый) - PullRequest
1 голос
/ 03 октября 2009

Я реализую сериализацию xml на основе Ответ Марка .

Должно ли это быть частью самого класса, т.е. Apple.Serialize / Deserialize?

Хотя в этом случае десериализация будет статической, поскольку у вас может не быть экземпляра для его вызова.

Или мне нужен другой класс для сериализации / десериализации? Если так, то они кажутся достаточно общими? Как мне это назвать? AppleSerializer кажется очень специфичным.

Или что-то лучше?

Ответы [ 2 ]

1 голос
/ 03 октября 2009

Один недостаток метода, предложенного Янником М. , заключается в том, что он связывает вас с конкретной реализацией XML-сериализации. По крайней мере, сериализация должна быть операцией виртуального экземпляра, чтобы ее можно было переопределить производными классами.

Кроме того, не начинайте с использования XML Serializer. Вместо этого используйте сериализатор Data Contract. Это более эффективно и быстрее за счет того, что вы не можете указать точную структуру сгенерированного XML (что вам вообще не нужно делать).

1 голос
/ 03 октября 2009

Код Serialize / Deserialize, предложенный Марком, никак не связан с вашим объектом Apple.

Поэтому я бы предложил объявить их статическими, сделать их немного более общими и поместить их в некоторый служебный класс. Вот так:

class Util
{
  public static string SerializeToXml<T>(T o) where T: class
  {
    using (var sw = new StringWriter())
    {
      var ser = new XmlSerializer(typeof(T));

      ser.Serialize(sw, o);

      return sw.ToString();
    }
  }

  public static T DeserializeFromXml<T>(string xml) where T: class
  {
    using (var sr = new StringReader(xml))
    {
      var ser = new XmlSerializer(typeof(T))

      return ser.Deserialize(sr) as T;
    }
  }
}
...