Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сериализация в разных файлах 
V
    Опции темы
Rohoss
Дата 7.9.2009, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 2
Всего: 18



Возможно, ли сохранить ссылки объектов друг на друга после сериализации и следующей десериализации объектов в разные файлы.
Вот пример, код написан только для теста. Тут ничего не получается, но может есть варианты?

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Save();
            Load();
        }

        public static void Save()
        {
            SomeClass sc = new SomeClass();

            ClassB cb = null;

            cb = new ClassB();
            cb.sss = "ss1";
            sc.list.Add(cb);

            cb = new ClassB();
            cb.sss = "ss2";
            sc.list.Add(cb);

            cb = new ClassB();
            cb.sss = "ss3";
            sc.list.Add(cb);

            sc.a.b = sc.list;

            Stream s = new FileStream("SomeClass.dat",
            FileMode.Create, FileAccess.Write, FileShare.None);
            BinaryFormatter binFormat = new BinaryFormatter();
            binFormat.Serialize(s, sc);
            s.Close();

            s = new FileStream("ClassA.dat",
            FileMode.Create, FileAccess.Write, FileShare.None);
            binFormat = new BinaryFormatter();
            binFormat.Serialize(s, sc.a);
            s.Close();
        }

        public static void Load()
        {
            Stream fStream = File.OpenRead("SomeClass.dat");
            BinaryFormatter binFormat = new BinaryFormatter();
            SomeClass sc = (SomeClass)binFormat.Deserialize(fStream);
            fStream.Close();

            fStream = File.OpenRead("ClassA.dat");
            binFormat = new BinaryFormatter();
            ClassA ca = (ClassA)binFormat.Deserialize(fStream);
            fStream.Close();

            sc.a = ca;


            if (sc.a.b.Equals(sc.list))
            {
                Console.WriteLine("true");
            }

            Console.ReadLine();
        }
    }

    [Serializable]
    public class SomeClass
    {
        public List<ClassB> list = null;

        [NonSerialized]
        public ClassA a = null;

        public SomeClass()
        {
            list = new List<ClassB>();
            a = new ClassA();
        }
    }

    [Serializable]
    public class ClassA
    {
        public List<ClassB> b = null;
    }

    [Serializable]
    public class ClassB
    {
        public string sss;
    }

}




--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Crypton
Дата 7.9.2009, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 9.10.2006
Где: США, Санкт-Петерб ург

Репутация: нет
Всего: 2



Нет. Ссылки на объекты как раз происходят в памяти. Можно сказать, что при сериализации обычно хранят данные класса ну и его метаданные.
--------------------
«Все, что вы знаете — ложь» Теория мироздания 
PM MAIL WWW ICQ Skype   Вверх
Rohoss
Дата 7.9.2009, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 2
Всего: 18



Цитата(Crypton @  7.9.2009,  06:51 Найти цитируемый пост)
Нет. Ссылки на объекты как раз происходят в памяти. Можно сказать, что при сериализации обычно хранят данные класса ну и его метаданные

Да это понятно. Я вот думал, может существуют какие – то обходные пути. Но похоже нет, придётся делать свою адресацию  smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Partizan
Дата 7.9.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Сериализуйте BinaryFormatter-ом в MemoryStream, после чего часть байтов можно записать в один файл, а часть - в другой.
Потом собирайте из нескольких файлов данные в один MemoryStream и десериализуйте.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Rohoss
Дата 7.9.2009, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 2
Всего: 18



Partizan, мне же нужно в разные файлы разные классы серилизовать. Как же я потом разделю MemoryStream на разные классы?

Это сообщение отредактировал(а) Rohoss - 7.9.2009, 21:42


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Partizan
Дата 7.9.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



а в чём, собственно проблема в вышеуказанном примере тогда?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Rohoss
Дата 7.9.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 2
Всего: 18



Partizan, но это, же упрощенный код.

Добавлено @ 22:15
Нужно держать ссылки на объекты, находящиеся в другом классе (который был в другом файле)

Это нужно для того чтобы быстро обратится к объекту, узнать ссылку на который не так просто. 

Это сообщение отредактировал(а) Rohoss - 7.9.2009, 22:18


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Partizan
Дата 7.9.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



проблема в вышеприведённом коде в чём?
в том, что 

Код

            if (sc.a.b.Equals(sc.list))
            {
                Console.WriteLine("true");
            }


тут false. в этом проблема?

Добавлено через 1 минуту
всё, понял

Добавлено через 7 минут и 47 секунд
Сохранить возможно, только придётся reflection-ом бегать по объектам и составлять карту ссылок...в общем стандартными средствами никак smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Crypton
Дата 8.9.2009, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 9.10.2006
Где: США, Санкт-Петерб ург

Репутация: нет
Всего: 2



Цитата

Сохранить возможно, только придётся reflection-ом бегать по объектам и составлять карту ссылок...в общем стандартными средствами никак


Мне страшно. Слишком рискованное дело.  smile 
--------------------
«Все, что вы знаете — ложь» Теория мироздания 
PM MAIL WWW ICQ Skype   Вверх
Rohoss
Дата 8.9.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 2
Всего: 18



Цитата(Crypton @  8.9.2009,  06:09 Найти цитируемый пост)
Мне страшно. Слишком рискованное дело

В моём случаи можно по другому. Так как нужные мне объекты это параметризированные, многократно вложенные друг в друга коллекции типа List, можно составить карту изначально что – то вроде 1.33.22.567, где 1 – будет корневым объектом в иерархии, а следующие вложениями. И таким образом последний будет нужным мне объектом. Перемещение между ними займёт некоторое время, но не принципиальное…


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Crypton
Дата 8.9.2009, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 9.10.2006
Где: США, Санкт-Петерб ург

Репутация: нет
Всего: 2



Цитата(Rohoss @ 8.9.2009,  10:58)
Цитата(Crypton @  8.9.2009,  06:09 Найти цитируемый пост)
Мне страшно. Слишком рискованное дело

В моём случаи можно по другому. Так как нужные мне объекты это параметризированные, многократно вложенные друг в друга коллекции типа List, можно составить карту изначально что – то вроде 1.33.22.567, где 1 – будет корневым объектом в иерархии, а следующие вложениями. И таким образом последний будет нужным мне объектом. Перемещение между ними займёт некоторое время, но не принципиальное…

А, ну тогда особых проблем быть не должно. А обязательно нужно юзать бинарную или XML тут не подойдет?
--------------------
«Все, что вы знаете — ложь» Теория мироздания 
PM MAIL WWW ICQ Skype   Вверх
Rohoss
Дата 8.9.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 2
Всего: 18



Цитата(Crypton @  8.9.2009,  20:31 Найти цитируемый пост)
А, ну тогда особых проблем быть не должно. А обязательно нужно юзать бинарную или XML тут не подойдет?

Не пройдёт, очень большой объем данных. А чем могло бы помочь, если бы я использовал XML или SOAP?


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Crypton
Дата 10.9.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 9.10.2006
Где: США, Санкт-Петерб ург

Репутация: нет
Всего: 2



Цитата

А чем могло бы помочь, если бы я использовал XML или SOAP?



Ну XML сериализацию можно пихнуть для например передачи данных к веб сервису по хттпэ. Еще очень помогает её юзать для настроек. Например создаем структуру Configuration где напрямую можно загружать настройки приложения.
--------------------
«Все, что вы знаете — ложь» Теория мироздания 
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1231 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.