2010-01-12 1 views
7

У меня есть заполненный DataTable, который я хотел бы сериализовать в файл для последующего использования. Я просматривал варианты, связанные с этим, и задавался вопросом, может ли кто-нибудь указать мне в правильном направлении.Сериализация данных для последующего повторного использования

То, что я буду создавать, это два метода: один для записи данных в файл, а другой для создания нового типа данных, использующего этот файл в качестве входных данных. Имеет ли смысл использовать методы WriteXML() и Load() для этого, и если да, то какой флаг (ы) - это те, на которых нужно сосредоточиться? Спасибо за руководство.

Я использую .Net 2.0, если это помогает.

ответ

10

Я бы хотел использовать методы чтения/записи xml. Мы используем это довольно широко. Это быстро, легко, он встроен в рамки.

+10

Я думаю, что этот ответ был бы намного лучше, если вы образец кода. Вы можете знать, как использовать методы чтения/записи XML, и, возможно, автору вопроса, но помните, что этот сайт - это нечто большее, чем просто получение ответов на наши собственные вопросы. Речь идет о документировании их для других, сталкивающихся с проблемой. Другие пользователи, приходящие на этот вопрос, могут не знать, как использовать методы. –

1

Вы можете использовать базовую технику сериализации вашей базы данных в CSV-файлах с заголовками. Некоторые системы управления базами данных поддерживают легкую загрузку данных из таких файлов. И в случае, если ваши dbms не делают этого, было бы не слишком сложно написать код, который сделает это за вас. Отвечает ли это на ваш вопрос?

По моему мнению, недостатком xml является то, что он содержит, возможно, больше метаданных, чем фактические данные. В случае csv-файлов метаданные не повторяются.

0

Является ли объект данных в памяти? Если это так, вы можете просто пойти с методами Serialize и Deserialize. Они относительно быстро, и вы можете сохранить результат в любом месте.

+0

Какие методы 'Serialize' и' Deserialize' вы имеете в виду? –

+0

Вы можете использовать методы в классе System.Xml.Serialization.XmlSerializer. Я сейчас у клиента, но когда у меня есть время, я попытаюсь получить примеры, которые у меня есть. Они довольно просты в использовании. –

+0

Привет, Да, DataTable находится в памяти. Мне было бы интересно увидеть фрагмент кода, так как сейчас я использую ReadXml() и WriteXml(). Благодаря! – larryq

13

Я думаю, что Silveira comment означает использование двоичной сериализации. И это право на то, что он очень быстро сравнивается с XML, сериализация которого очень медленная по сравнению с бинарными специально для большого количества данных. Кроме того, это занимает гораздо меньше места на диске по сравнению с XML.

public static void Serialize(DataSet ds, Stream stream) { 
     BinaryFormatter serializer = new BinaryFormatter(); 
     serializer.Serialize(stream, ds); 
    } 

    public static DataSet Deserialize(Stream stream) { 
     BinaryFormatter serializer = new BinaryFormatter(); 
     return (DataSet)serializer.Deserialize(stream); 
    } 
+0

Один из недостатков в использовании двоичной сериализации состоит в том, что двоичная сериализация содержит серийное сечение, определенное серийным номером, поэтому, если System.Data.dll изменится, вы не сможете прочитать данные из двоичного файла. Но так как DataSet и другие классы в пространстве имен являются частью фреймворка и не любят меняться, поэтому я не вижу никаких проблем в этом случае. – affan

+0

Мне обычно приходилось сериализовать небольшие объемы данных, поэтому XMLSerializer был в порядке. Но суть в том, что мы все, похоже, согласны с тем, что сериализация - это хороший путь вперед. Правильный форматтер (XML, Binary, DataContract) может быть выбран в зависимости от других требований (например, если вам нужно только прочитать данные в своем приложении и не нужно экспортировать их в другую среду, Binary кажется идеальным выбором) , –

+0

Спасибо за отзыв, Affan – larryq

7

ВАЖНЫЙ МОМЕНТ:
Если вы попытаетесь сериализовать DataTable объект или DataSet объекта с помощью двоичного форматера, вы все равно получите двоичный файл, но это довольно большой, потому что он заполнен с тонны данных XML. К сожалению, данные XML в двоичных файлах делают для огромных файлов, которые не обладают преимуществами переносимости и удобочитаемости, предоставляемыми XML. Впоследствии десериализация таких файлов может занять несколько секунд и в конечном итоге займет гораздо больше памяти, чем это действительно необходимо. В результате, если вы выберете двоичную сериализацию объектов ADO.NET, потому что вам нужно получить более компактный выход, вы потерпите неудачу. Бинарная сериализация по-прежнему является наиболее эффективным с точки зрения космоса, но с объектами ADO.NET это не так эффективно, как должно.

Для получения полной справки в следующей статье: -
http://msdn.microsoft.com/en-us/magazine/cc188907.aspx

+0

Хотя это замечательное замечание, на самом деле это не ответ на вопрос, + ссылка мертва. – Szybki

 Смежные вопросы

  • Нет связанных вопросов^_^