Другие языки программирования и технологии

Бинарная Сериализация. С# (Оч нужна помощ)

Вобщем у меня есть два проекта. Один что то вроде редактора - там я загружаю данные из подправляю, а во втором уже непосредственно с ними работаю.
тоесть я планировал так сделать.

Написал первый проект. там все работает отлично . Сохраняет, загружает как надо.
Во втором проекте создал такойже класс как и в первом и попробовал туда загрузить данные из первого проекта.

Выдало ошибку, мол не может найти WindowsFormsApplication1 - это так у меня называется первый проект =((
(незнаю может я че неправильно написал или оно так и задумано, что работает только в пределах одного проекта)

Вобщем вопрос такой. Как мне ДЕсерилизовать эти данные из одного проекта в другой???? Это вообще возможно ???

Переписывать проекты очень нежелательно, хотелось бы сделать именно чтобы одна прога была как редактор а вторая рабочая.

функции серелизации / десерилизации стандартный, без наворотов . вот пример,

public recognize() // LOAD
{
string putj = "OCR_SAVE.s";

if (File.Exists(putj))
{
FileStream fs = new FileStream(putj, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryFormatter bf = new BinaryFormatter();

list = (letter[])bf.Deserialize(fs);
fs.Close();
}

//================================================================

public static void serialize() //SAVE
{
// sozdajem potok
string putj = dir + "OCR_SAVE.s"; // lu4we bez "DIR" soxranatj srazu v tekuwuju papku
FileStream fs = new FileStream(putj, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
BinaryFormatter bf = new BinaryFormatter();

// sama serializacija
bf.Serialize(fs, list);
fs.Close();
}
>> Как мне ДЕсерилизовать эти данные из одного проекта в другой???? Это вообще возможно ???

1) Данные используемые в 2-х ехе-шниках должны быть вынесены в совместно используемый проект типа "Библиотека". Дальше эта библиотека подключена как reference к обоим проектам. И тогда твой класс будет уже находиться не в пространстве имен WindowsFormsApplication1, а где-то в MyLibrary1.

2) Есть и второе решение. Предположим есть WindowsFormsApplication1 и WindowsFormsApplication2, и в первом проекте есть данные которые используются и во втором проекте. Тогда их надо объявить с модификатором public, а во втором проекте поставить ссылку reference на первый проект. И тогда второй проект сможет также десериализовать объекты из WindowsFormsApplication1.

ОДНАКО! Вторая схема имеет ограничения. Все совместно используемые данные придется и далее размещать только в первом проекте. Потому что C# запрещает создание двух сборок которые имеют ссылки друг на друга. Вы должны верно проектировать проект. Если не знаете сколько вам нужно общих библиотек - делайте одну. И складывайте всё там.

К примеру. У вас есть
- система сериализации
- система обмена по сети
- какие-то низкоуровневые файловые примочки
- программа которая имеет GUI и использует ваши наработки
- программа которая сериализует и загружает на FTP

Значит создаем 2 программы, а остальное выкладываем в библиотеку. И стремимся проектировать так, чтобы эта библиотека никак не зависела от того что мы пишем в двух программах.
Чем абстрактнее вы мыслите тем ближе вы к победе.
И наоборот, чем сильнее вы связываете проект тем больше повышаете риски его завалить или переписать.
Александр Петров
Александр Петров
10 716
Лучший ответ
вынеси сериализуемые классы в отдельную сборку и подключи ее к обоим проектам
Юрий Сергеев
Юрий Сергеев
2 702
Существует ХМЛ-сериализация и десериализации для таких целей