Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2012, 23:07   #1
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию Проблема Deserialize

Добрый день!
Решил потренироваться в сохранении и открытии файлов и столкнулся с проблемой!
1)создал программу FileSave
-определил класс Car
Код:
    [Serializable]
    class Car
    {
        private string name;
        private int max_speed;
        private int year;
        public Car() { }
        public Car(string name, int max_speed, int year)
        {
            this.Name = name;
            this.Max_speed = max_speed;
            this.Year = year;
        }
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public int Max_speed
        {
            get { return max_speed; }
            set
            {
                if (value<0)
                {
                    max_speed = 0;
                }
                else if (value>500)
                {
                    max_speed=500;
                }
                else
                {
                    max_speed = value;
                }
            }
        }
        public int Year
        {
            get { return year; }
            set { year = value; }
        }
        public override string ToString()
        {
            return String.Format("***\nИмя: {0}\nМаксимальная скорость: {1}\nГод выпуска: {2}\n",
                                   this.Name, this.Max_speed, this.Year);
        }
    }
написал тело программы:
Код:
    class Program
    {
        static void Main(string[] args)
        {
            List<Car> List_Car = new List<Car>()
            {
                new Car("BMW",100,1985),
                new Car("Volvo",300,2010),
                new Car("F1",510,1990)
            };
            List_Car.Add(new Car("Ferrari", 458, 2008));
            foreach (Car car in List_Car)
            {
                Console.WriteLine(car);
            }
            
            DirectoryInfo Dir1 = new DirectoryInfo(".");
            DirectoryInfo Dir_Key = Dir1.CreateSubdirectory("Key");
            Console.WriteLine(Dir_Key);
            BinaryFormatter BF = new BinaryFormatter();
            string FileSave = String.Format("{0}\\Key.sys", Dir_Key.FullName);
            using (Stream FStream=new FileStream(FileSave,FileMode.Create,FileAccess.Write,FileShare.None))
            {
                BF.Serialize(FStream, List_Car);
            }
            Console.ReadLine();
        }
    }
Все ок!
Далее пишу отдельно программу FileOpen:
Код:
    class Program
    {
        static void Main(string[] args)
        {
            List<Car> List_Car = null;
            DirectoryInfo Dir1 = new DirectoryInfo(@"D:\C-sharp\FileSave\FileSave\bin\Debug\Key");
            string FilePath = String.Format("{0}\\Key.sys", Dir1.FullName);
            Console.WriteLine(Dir1.FullName);
            BinaryFormatter BF = new BinaryFormatter();
            using (Stream Fstrem=File.OpenRead(FilePath))
            {
                List_Car= (List<Car>)BF.Deserialize(Fstrem);
            }
            foreach (Car car in List_Car)
            {
                Console.WriteLine(car);
            }
            Console.ReadLine();
        }
    }
мне выдает исключение!!!
см. Приложенный файл
Так что получается нельзя сохранять и открывать файлы из разных сборок???
Изображения
Тип файла: jpg error.JPG (120.8 Кб, 129 просмотров)
Fedosss вне форума Ответить с цитированием
Старый 10.07.2012, 23:16   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сериализуемый/десериализуемый класс лучше вынести в библиотеку тогда.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2012, 23:27   #3
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию

попробуем!
Хотя я файл Саr.cs и в программу FileOpen добавлял.

Попробовал:
Странно выдает ошибку :"CarLibrary.Car" недоступен из-за его уровня защиты
хотя все как и в первом парианте с модификаором public

Последний раз редактировалось Fedosss; 10.07.2012 в 23:46.
Fedosss вне форума Ответить с цитированием
Старый 10.07.2012, 23:48   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
public class Car
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2012, 23:59   #5
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию

Ну я и тупень!
Спасибо большое(Пепел Феникса)!
Кстати а почему с библиотеками работает!
А если добавить в каждый проект Car.cs то нет?
Fedosss вне форума Ответить с цитированием
Старый 11.07.2012, 00:11   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Кстати а почему с библиотеками работает!
класс находится там, значит он один у всех.
иначе у каждого приложения своя копия класса, хоть и одинаковая по членам, но для dotNET это разные классы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.07.2012, 00:37   #7
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию

Хм.
Но это ж не глобальная сборка(которая находится в глобальном кэше сборок GAC) ! Я бы понял если сборка была развёрнута в GAC и ей было присвоено строгое имя(GUID). А так по сути в каждом проекте своя копия сборки, что тоже может быть как разная для dotNet, Хотя там тож есть атрибуты по которым можно понять что это та сборка!
Спасибо за ответ как ни как +знания :-)
Fedosss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача файлов. Проблема с Deserialize Sandman89 C# (си шарп) 0 17.12.2011 22:42
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37