[.net] Сериализация как механизм сохранения данных приложения

durka82

Хочу использовать в своих программах сериализацию для сохранения данных на диск (ну и последующего восстановления) в XML.
Только вот нигде не нашел, как можно выбрать произвольное место и имя файла для сохранения
Это не так критично, но если бы можно было это сделать, было бы совсем хорошо
Ну и хотелось бы услышать ваши соображения по этому поводу.
Вдруг это настолько проблематичное решение, что лучше и не связываться (на простых примерах работает, а вот сложные структуры пока не пробовал).
Рассматриваю сериализацию как альтернативу использования БД для программ, работающих с не очень большими объемами данных (в том числе интересно узнать примерный эффективный потолок).
Если тут все плохо, то есть ли альтернативные решения?
Спасибо за внимание

sbs-66

Если данных, с которыми надо работать одновременно, больше, чем ты можешь занять физической памяти, то это неэффективно, если меньше, то сойдёт. Только не очень понятно, зачем серилизовать в XML? Ты их потом будешь извне править, эти данные, что ли? Если нет, то лучше в бинарном виде серилизовать - и места меньше занимает, и работает быстрее.

durka82

Физической памяти должно хватать.
С XML на бинарный и обратно вроде никаких проблем перевести нет - просто меняешь класс сериализатора (или так просто не получится? а пока прога пишется так удобнее отслеживать, что все правильно сохраняется.
Да и потом (когда данных станет много и таки захочется загнать их в БД) это может стать удобным способом выгрузки данных в БД.

aleks058

Вопрос не очень понял.
Мож это подойдет?
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace DB.GM.GCT.FO.Utilities.Serialization
{
public static class XmlSerializerHelper
{
public static void Serialize<T>(T obj, string outputPath)
{
Directory.CreateDirectory(Path.GetDirectoryName(outputPath;

using (StreamWriter output = File.CreateText(outputPath
{
XmlSerializer serializer = new XmlSerializer(typeof(T;
serializer.Serialize(output, obj);
}
}

public static T Deserialize<T>(string inputPath)
{
using (StreamReader input = File.OpenText(inputPath
{
XmlSerializer serializer = new XmlSerializer(typeof(T;
return (T)serializer.Deserialize(input);
}
}

public static string SerializeToString(object obj)
{
StringBuilder outputString = new StringBuilder;

XmlWriterSettings writerSettings = new XmlWriterSettings;
writerSettings.OmitXmlDeclaration = true;
writerSettings.Indent = true;

using (XmlWriter writer = XmlWriter.Create(outputString, writerSettings
{
XmlSerializer serializer = new XmlSerializer(obj.GetType;
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces;
namespaces.Add("", "");
serializer.Serialize(writer, obj, namespaces);
}

return outputString.ToString;
}

public static T DeserializeFromString<T>(string serializedObject)
{
return (T)DeserializeFromString(typeof(T serializedObject);
}

public static object DeserializeFromString(Type type, string serializedObject)
{
using (StringReader input = new StringReader(serializedObject
{
XmlSerializer serializer = new XmlSerializer(type);
return serializer.Deserialize(input);
}
}
}
}

Dasar

С XML на бинарный и обратно вроде никаких проблем перевести нет - просто меняешь класс сериализатора (или так просто не получится?
бинарный и xml - сериализаторы работают на разных принципах
ps
soap(с натяжкой его конечно можно считать за xml) и бинарный - используют один и тот же механизм

durka82

Я тормоз - вопрос про указание пути сохранение исчерпан.
Но вообще мнения и опыт по этому вопросу было бы интересно услышать
Оставить комментарий
Имя или ник:
Комментарий: