Правильно. Хотя для класса XmlSerializer совершенно параллельно, есть ли этот атрибут. А вот для различных подклассов класса Formatter это необходимо. Ниже привожу пример, использующий класс BinaryFormatter
Наш класс
[Serializable]
class Data
{
public String data1;
public Double data2;
public Data(String data1, Double data2)
{
this.data1 = data1;
this.data2 = data2;
}
}
Собственно сериализация
ArrayList list = new ArrayList();
list.Add(new Data("1", 1));
list.Add(new Data("2", 2));
list.Add(new Data("3", 3));
BinaryFormatter binaryFormatter = new BinaryFormatter();
FileStream stream = new FileStream("c:\\ser.dat", FileMode.Create, FileAccess.Write);
binaryFormatter.Serialize(stream, list);
stream.Close();
stream = new FileStream("c:\\ser.dat", FileMode.Open, FileAccess.Read);
ArrayList list2 = new ArrayList();
list2 = (ArrayList)binaryFormatter.Deserialize(stream);
stream.Close();
В рельтате объект list2 будет содержать элементы объекта list
Кстати раз уж зашел разговор о сериализации, то пара слов о классе XmlSerializer. Он позволяет генерить xml на основе класса, и для этого не нужен атрибут [Serializeable]. Зато наш класс он не сериализует, ссылаясь на то что у него нет конструктора без параметров. Да, и класс обязательно должен быть public. Т.е. нам нужен класс примерно такой:
public class Data
{
public String data1;
public Double data2;
public Data()
{
this.data1 = string.Empty;
this.data2 = 0;
}
public Data(String data1, Double data2)
{
this.data1 = data1;
this.data2 = data2;
}
}
На этом фокусы XmlSerializer не кончаются. Он наотрез отказывается сериализовать нетипизированные коллекции, такие как ArayList. Зато типизированные - на ура, например коллекцию типа List<Data> он сериализует. Работающий пример кода для типизированной коллекции:
List<Data> list = new List<Data>();
list.Add(new Data("1", 1));
list.Add(new Data("2", 2));
list.Add(new Data("3", 3));
FileStream stream = new FileStream("c:\\ser.xml", FileMode.Create, FileAccess.Write);
XmlSerializer serializer = new XmlSerializer(typeof(List<Data>));
serializer.Serialize(stream, list);
stream.Close();
Итак, сериализовать могут многие, но "не все йогурты одинаково полезны"
Тебе идеально использовать BinaryFormatter, а если хочется передавать данные через сеть, то можно и SoapFormatter. Лежат они в System.Runtime.Serialization.Formatters.Binary и System.Runtime.Serialization.Formatters.Soap соответственно
Удачи