2009-10-02 2 views
1

Я реализую сериализацию xml на основе Marc's answer.Как реализовать сериализацию? (интерфейс/условно)

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

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

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

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

ответ

1

Код Serialize/Deserialize, предложенный Marc, никак не связан с вашим объектом 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; 
    } 
    } 
} 
+0

-1 для без 'использования' блоков. –

+1

Я ответил на вопрос, я не переписал код сериализации. –

+0

Тогда скажем, «-1 для распространения ошибки». Люди копируют и вставляют наш код, часто не понимая его. Мы должны быть осторожны, когда отправляем код. –

1

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

Также не начинайте использовать XML-сериализатор. Вместо этого используйте сериализатор данных. Он эффективнее и быстрее, за счет того, что вы не можете указать точную структуру сгенерированного XML (что вам может и не нужно делать вообще).

+0

Марк охватил это уже в своем ответе на исходный вопрос. (Не стесняйтесь также его понижать ;-) –

+0

Я согласен с тем, что теоретически не связано с реализацией, но не будет ли другой реализацией сериализации новых атрибутов объекта, который вы пытаетесь сериализовать? Таким образом, ваш код будет всегда зависимым от реализации? –

+0

Я имел в виду, что метод 'Util.SerializeToXml', который всегда использует XML Serializer, связывает вас с этой технологией. Мне не нравится скрывать зависимость реализации в середине класса утилиты, где никто ее не ищет. –