Можно ли сохранить произвольные данные в файл на C #?
-
06-07-2019 - |
Вопрос
У меня есть класс с большим количеством коллекций, загруженных в память.Возможно ли каким-то образом сохранить этот класс со всеми его данными в файл, чтобы иметь возможность позже просто перезагрузить его в память?Есть ли интерфейс, который бы справлялся со всем этим?
Решение
То, что вы описываете, называется сериализация.Вы преобразуете объект в некоторый формат данных, который вы можете сохранить на диске, а затем вы можете позже десериализовать эти данные в объект.Есть много способов сделать это, но первым шагом будет сделать ваш класс сериализуемым, добавив атрибут Serializable:
[Serializable]
public class YourClass
{
// the class goes here
}
Тогда вы можете использовать, например, XmlSerializer
класс для обработки сериализации / десериализации.
Обновить
Я должен упомянуть, что вы можете использовать XmlSerializer
даже если ваш класс не украшен Serializable
атрибут.Однако для некоторых других механизмов сериализации этот атрибут требуется.
Другие советы
используйте BinaryFormatter сериализовать экземпляр
И добавьте атрибут [Serializable] перед определением класса
Вы можете использовать .Средство сетевой сериализации, просто вам нужно пометить свой класс атрибутом [Serializable], и все члены также должны быть сериализуемыми
Пример кода:
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
class A
{
public static void Serialize(object obj,string filepath)
{
Formatter f = new BinaryFormatter();
f.Serialize(new FileStream(filepath,FileMode.Create),obj);
}
public static A Deserialize(string filepath)
{
Formatter f = new BinaryFormatter();
return f.Deserialize(new FileStream(filepath, FileMode.Open)) as A;
}
}