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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> COM-объект, Сериализация 
:(
    Опции темы
QryStaL
Дата 7.12.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Можно ли сериализовать COM-объект? К примеру, BinaryFormatter (атрибут Serializable не указан) ?


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
tol05
Дата 7.12.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



можно серилизовать вообще все. Просто сделай класс, наследник от ISerializable и напиши внутри него нужную реализацию 
Код

void GetObjectData (SerializationInfo info,StreamingContext context){}

В которой все, что ты хочешь серилизовать, помещай в StreamingContext
в msdn есть нормальные примеры.
например этот


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
QryStaL
Дата 10.12.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Any class that might be serialized must be marked with the SerializableAttribute. © MSDN

Реализацию интерфейса ISerializable я пробовал, но в итоге получается то же самое. Все примеры, которые в МСДН, сериализуют или примитивные типы, или [Serializable] объекты. А у меня COM-объект, к-й выкидавает один и тот же SerializationException:

Type 'OtdrAnalysis.TraceMeasurementsClass' in Assembly 'Interop.OtdrAnalysis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

Какой выход?


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
tol05
Дата 10.12.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



ну так нужно пометить класс этим аттрибутом  smile 

Прийдется писать свой класс-враппер для COM объекта.
Цитата(tol05 @  7.12.2007,  17:05 Найти цитируемый пост)
Просто сделай класс, наследник от ISerializable и напиши внутри него нужную реализацию

...
Цитата(tol05 @  7.12.2007,  17:05 Найти цитируемый пост)
В которой все, что ты хочешь серилизовать, помещай в SerializationInfo

Пример. Я сделал в проекте ссылку на библиотеку Adobe Photoshop 9.0 Object Library. Допустим, мне нужен класс RGBColorClass. Пишу враппер MyRGB для серилизации
Код

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Windows.Forms;
using Photoshop;

namespace WindowsApplication3
{
    [Serializable]
    class MyRGB    : ISerializable
    {
        private RGBColorClass rcc = new RGBColorClass();

        public MyRGB(SerializationInfo info, StreamingContext context)
        {
            Blue = info.GetDouble("Blue");
            Red = info.GetDouble("Red");
            Green = info.GetDouble("Green");
        }

        public MyRGB()
        {

        }

        public double Blue
        {
            get
            {
                return rcc.Blue;
            }
            set
            {
                rcc.Blue = value;
            }
        }

        public double Red
        {
            get
            {
                return rcc.Red;
            }
            set
            {
                rcc.Red = value;
            }
        }

        public double Green
        {
            get
            {
                return rcc.Green;
            }
            set
            {
                rcc.Green = value;
            }
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Blue", Blue);
            info.AddValue("Red", Red);
            info.AddValue("Green", Green);
        }
    }

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            MyRGB rcc = new MyRGB();
            rcc.Blue = 0.5;
            rcc.Red = 1.0;
            rcc.Green = 0.5;

            BinaryFormatter bf = new BinaryFormatter();
            Stream stream = new FileStream("temp.txt", FileMode.Create);
            bf.Serialize(stream, rcc);

            stream.Dispose();

            stream = new FileStream("temp.txt", FileMode.Open);
            MyRGB obj = bf.Deserialize(stream) as MyRGB ;
        }    
    }    
}

ну вот и все, не очень сложно? smile

Это сообщение отредактировал(а) tol05 - 10.12.2007, 12:51


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
QryStaL
Дата 10.12.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



tol05, Спасибо  smile  Вроде разобрался.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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