[WT] [Архив] [Поиск] Главная Управление
[Совместно с Ычаном]

[Назад]
Ответ в нить
Имя
Animapcha image [@] [?]
Тема   ( ответ в 6059)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаемые типы файлов: 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, OGG, PDF, PNG, PSD, RAR, SVG, SWF, TXT, XCF, ZIP
  • Максимально допустимый размер файлов: 10000 кБ.
  • Изображения, размер которых превышает 200 на 200 пикселей, будут уменьшены.
  • Ныне 1229 unique user posts. Посмотреть каталог
  • Радио:

Файл: 13262295844.jpg-(61.76KB, 317x372, 0_213fd_7b8b633_L.jpg)
6059 No. 6059 watch    
Представим что у нас есть 2 dictionary вида (id, object),где object - соответственно объект класса с набором методов возвращающих значения его полей.
Как реализовать сериализацию/десериализацию, в начале/конце работы приложения(в принципе не важно где и когда, просто вдруг понадобится), на C#. Msdn читал, честно говоря - сложновато я не понимаю как сериализовывать именно в моем случае. Я не требую готового кода, с радостью приму приблизительный пример или псевдокод.
Развернуть все изображения
>> No. 6060    
Ну.. Я не очень опытный, но могу предложить тебе несколько вариантов, а ты сам выберешь (на шарпе не писал, если что).

Если у всех твоих объектов - одинаковый класс, то не понимаю в чем проблема. Do it, faggot.

Если не одинаковый - то возможны варианты.
1) Сериализуешь так: айдишник, тип (там же есть RTTI?), сам кусок памяти, в котором хранится объект класса (там же можно обращаться к объекту класса как к куску памяти?). При чтении кастишь к нужному типу абстрактный кусок памяти, вынутый из сериализованного вида.

2) Каждому из классов дописываешь метод, который будет сериализовать объект этого конкретного класса, потом по очереди всех их сериализуешь.

3) Пишешь свой (там интерфейсы кажется в отдельное понятие выделено, да?) интерфейс Serialisable, и используешь его.
>> No. 6061    
>>6060 Хотя, блин, 2 от 3 не очень-то отличается, да.
>> No. 6063    
Ну чтобы не быть голословным вот код:
класс из объектов которого состоит дикшнри:
public class Tour
{
int id;
string name;
string spisok_ex;
int cena;
int totfame;
int tcena;

public Tour(int i_d, string name_, string spisok_ex_, int cena_, int totfame_, int tcena_)
{
totfame = totfame_;
id = i_d;
name = name_;
spisok_ex = spisok_ex_;
cena = cena_;
tcena = tcena_;
}

public int ID
{
get { return id; }
}

public string SPISOK_EX
{
get { return spisok_ex; }
set { spisok_ex = value; }
}

public int CENA
{
get { return cena; }
set { cena = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public int TOTFAME
{
get { return totfame; }
set { totfame = value; }
}
public int TCENA
{
get { return tcena; }
set { tcena = value; }
}
}
>> No. 6064    
Собственно сами дикшнри:
public class Diction
{
public Dictionary<int, Tour> Spisok;
public Dictionary<int, Excursion> Spisok2;
public Diction()
{
Spisok2 = new Dictionary<int, Excursion>();
Spisok = new Dictionary<int, Tour>();
}
}
>> No. 6065    
В процессе могут добавятся\удалится\изменится как поля, так и сами объекты. Как корректно сохранить и считать их? Я правда уже перелопатил не один вариант предлагаемый как мсдн так и найденные на сторонних ресурсах, мне просто не хватает сообразительности как это сделать в моем случае.
>> No. 6067    
Решилось встроенной бинарной сериализацией.
>> No. 6068    
Файл: 132630356387.jpg-(60.54KB, 266x371, Chiyoportrait.jpg)
6068
>>6067
Chio-tan approves. Osaka does not approve.

>Представим что у нас есть 2 dictionary вида (id, object),где object - соответственно объект класса с набором методов возвращающих значения его полей.
>Как реализовать сериализацию/десериализацию
>В процессе могут добавятся\удалится\изменится как поля, так и сами объекты. Как корректно сохранить и считать их?

Не учитывается факт В процессе могут добавятся\удалится\изменится как поля, так и сами объекты, что в плане сериалицации @ десереализации может выллиться в интересные вещи.
Если хочешь безопасный секс - сохраняй данные в эксемель и восстанавливай их оттуда же. Иначе "изменившийся объект" может порушить программу (например, когда мы имеем объект, у которого в начале работы один обработчик некоего метода, а в середине он меняется на другой).

Т.е. берем объект.
Делаем в нем метод "save2xml" (на самом деле не обязательно эксемель, но это круто и энтерпрайзно) после чего делаем дамп данных в эксэмель.
После делаем функцию "loadfromxml" (считываем данные, даже если наш объект мутирует и части полей не будет внутреннюю логику программы это не убьет, во всяком случае сегфолта и memory can not be read мы увидеть не должны никогда, так адреса методов размещаются менеджером памяти ОС). Это если используется разное вуду вроде подгрузки DLL и динамического назначения обработчиков которых может и не быть к следующему старту программы. Я, если честно, не очень могу в решетку и посему не могу сказать, возможна ли на ней ситуация когда частные поля объекта будут ссылаться на левый код из стороннего куска памяти.
>> No. 6082    
protobuf .Net Есть две реализации, какая-то вроде пижже.
[Назад]


Удалить сообщение []
Пароль  
[Mod]