Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C#]Сериализация  
:(
    Опции темы
ArniLand
Дата 16.5.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Почитал в справочнике Шилдта по C# по сериализацию, вроде выглядит понятно написано, но не сильно понимаю как требуется выполнить следующее, в плане как реализовать, задание по серилиазации. Может подскажите где еще можно почитать теорию про сериализацию. Разъясните пожалуйста как делать данное задание, если можно с примерами.Я данное задание представляю следующим образом:
Методы которые подсчитывают тираж, увеличение стоимости на определенный процент процент, и вывод на консоль информации о книге, разве что еще с добавлением записи и считывания с файла с использования FileStream. Правильно ли я понял как делать?
Задание выглядит следующим образом:
Цитата
Цель работы – исследовать механизм сериализации в языке программирования С# и научиться использовать классы библиотеки FCL для выполнения сериализации.
Задание:
1. Записать в файл и прочитать из файла набор значений наперед определенного типа, количество и тип которых задан вариантом. 
2. Описать класс, заданный вариантом, и предусмотреть для него возможность сериализации. 
3. Создать массив объектов класса, указанного в п.2, и сериализовать их в файл. 
4. Создать новый массив и возобновить в нем значение сериализованых объектов

Вариант:
1. Атрибуты данных: тип ushort, количество 12
2. Класс который реализуется:
  а) Данные - книга: Серийный номер, название,  год издания, стоимость экземпляра, количество экземпляров
  б) Методы и свойства - Увеличение стоимости на определенный процент; общая стоимость тиража; выведение информации о книге
  в) Количество объектов - 4



Это сообщение отредактировал(а) ArniLand - 16.5.2010, 16:38
PM MAIL   Вверх
mrbrooks
Дата 17.5.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 16
Всего: 306



Что то типа этого. Шаблон есть - дальше дело техники
Код

using System;
using System.Text;
using System.Xml.Serialization;
using System.IO;

namespace Test
{
    [Serializable]
    public class Book
    {
        public string SerialNumber;
        public string NameBook;
        public decimal PriceBook;
        public uint CountBooks;

        public Book()
        {
            SerialNumber = "n\a";
            NameBook = "n\a";
            PriceBook = 0m;
            CountBooks = 0;
        }

        public Book(string SerialNumber, string NameBook, decimal PriceBook, uint CountBooks)
        {
            this.SerialNumber = SerialNumber;
            this.NameBook = NameBook;
            this.PriceBook = PriceBook;
            this.CountBooks = CountBooks;
        }
        
        public void ChangePrice(float percent)
        {
            PriceBook = PriceBook * Convert.ToDecimal(percent / 100);
        }

        public decimal TotalPrice()
        {
            return PriceBook*CountBooks;
        }

        public override string ToString()
        {
            StringBuilder result = new StringBuilder("Информация о книге:" + Environment.NewLine);
            result.AppendFormat("Серийный номер: {0}{1}",SerialNumber,Environment.NewLine);
            result.AppendFormat("Название: {0}{1}",NameBook,Environment.NewLine);
            result.AppendFormat("Цена: {0:C}{1}",PriceBook,Environment.NewLine);
            result.AppendFormat("Количество: {0}{1}",CountBooks,Environment.NewLine);
            result.AppendFormat("Общая стоимость: {0:C}{1}",TotalPrice(),Environment.NewLine);
            return result.ToString();
        }

        public static void BookSerialize(Book obj, string fileName)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Book));
            using(StreamWriter writer = new StreamWriter(fileName))
                                        serializer.Serialize(writer,obj);
        }

        public static Book BookDeserialize(string fileName)
        {
            Book obj;
            XmlSerializer serializer = new XmlSerializer(typeof(Book));
            using (StreamReader reader = new StreamReader(fileName))
                obj = (Book) serializer.Deserialize(reader);
            return obj;
        }

    }
    
    [Serializable]
    public class BookList
    {
        [XmlElement(typeof(Book))]
        public ArrayList Books;

        public BookList()
        {
            Books = new ArrayList();
        }

        [XmlInclude(typeof(Book))]
        public void Add(Book obj)
        {
            Books.Add(obj);
        }

        public static void BooksSerialize(BookList obj, string fileName)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(BookList));
            using (StreamWriter writer = new StreamWriter(fileName))
                serializer.Serialize(writer, obj);
        }

        public static BookList BooksDeserialize(string fileName)
        {
            BookList obj;
            XmlSerializer serializer = new XmlSerializer(typeof(BookList));
            using (StreamReader reader = new StreamReader(fileName))
                obj = (BookList)serializer.Deserialize(reader);
            return obj;
            
        }
    }
    
     static void Main(string[] args)
     {
            Book book = new Book("1230 - 1254 - 777","Книга 7",25.15m,100);
            Console.WriteLine(book);
            book.ChangePrice(10f);
            Console.WriteLine(book);
            Book.BookSerialize(book, "res.xml");
            Book b1 = Book.BookDeserialize("res.xml");
            Console.WriteLine(book);
            Console.WriteLine("*******************************************");
            BookList list = new BookList();
            list.Add(new Book("1230 - 1254 - 111", "Книга 1", 125.35m, 100));
            list.Add(new Book("1230 - 1254 - 222", "Книга 2", 24.55m, 34));
            list.Add(new Book("1230 - 1254 - 333", "Книга 3", 56.85m, 46));
            list.Add(new Book("1230 - 1254 - 444", "Книга 4", 195.75m, 83));
            BookList.BooksSerialize(list, "res_arr.xml");
            BookList res = BookList.BooksDeserialize("res_arr.xml"); 
            foreach (Book item in res.Books)
            {
                Console.WriteLine(item);
            }
            Console.Read();
     }
}


PM MAIL   Вверх
ArniLand
Дата 18.5.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



mrbrooks,  к сожалению еще с XML и XML сериализацией не проходили и в университете не разрешат ее скорее всего использовать

Это сообщение отредактировал(а) ArniLand - 18.5.2010, 15:46
PM MAIL   Вверх
mrbrooks
Дата 19.5.2010, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 16
Всего: 306



А бинарную проходили?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

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


 




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


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

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