Опубликован: 02.08.2013 | Доступ: свободный | Студентов: 464 / 17 | Длительность: 18:38:00
Специальности: Программист
Самостоятельная работа 7:

Работа с JSON, XML, сжатие данных

< Лекция 18 || Самостоятельная работа 7: 123 || Самостоятельная работа 8 >

В Листинге 27.2 приведен полный код файла MainPage.xaml.cs

using Ionic.Zlib;
using Microsoft.Phone.Controls;
using System;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Windows;
using System.Xml.Serialization;

namespace P7_1
{

    public partial class MainPage : PhoneApplicationPage
    {
        // Конструктор
        public MainPage()
        {
            InitializeComponent();
        }

        private void cmd_SerializationXML_Click(object sender, RoutedEventArgs e)
        {
            //Объект для сериализации
            ForSerialization ObjectForSerialization = new ForSerialization();

            //Тип данных для сериализации

            Type t = typeof(ForSerialization);

            //XML-сериализатор для объекта
            XmlSerializer XmlS = new XmlSerializer(t);

            //Поток для хранения результатов сериализации
            MemoryStream XmlStr = new MemoryStream();

            //Сериализация в поток
            XmlS.Serialize(XmlStr, ObjectForSerialization);

            //Подготовка к чтению данных из потока
            XmlStr.Position = 0;

            //Средство считывания потока
            StreamReader StRead = new StreamReader(XmlStr);

            //Строка в которую считывается поток
            string XmlString = StRead.ReadToEnd();

            //Вывод строки
            MessageBox.Show(XmlString);

            //Десериализация

            XmlSerializer XmlDS = new XmlSerializer(t);

            //Подготовка потока
            XmlStr.Position = 0;

            //Создаём объект из сериализованных данных
            ForSerialization NewObjectFromXML = XmlDS.Deserialize(XmlStr) as ForSerialization;

            MessageBox.Show("Десериализация завершена");

        }

        private void cmd_SerializationJSON_Click(object sender, RoutedEventArgs e)
        {
            //Объект для сериализации
            ForSerialization ObjectForSerialization = new ForSerialization();

            //Тип данных для сериализации

            Type t = typeof(ForSerialization);

            //JSON-сериализатор
            DataContractJsonSerializer JsS = new DataContractJsonSerializer(t);

            //Поток для хранения результатов сериализации
            MemoryStream JsonStr = new MemoryStream();

            JsS.WriteObject(JsonStr, ObjectForSerialization);

            //Подготовка к чтению данных из потока
            JsonStr.Position = 0;

            //Средство считывания потока
            StreamReader StRead = new StreamReader(JsonStr);

            //Строка в которую считывается поток
            string JsonString = StRead.ReadToEnd();

            //Вывод строки
            MessageBox.Show(JsonString);

            //Десериализация

            DataContractJsonSerializer JsDS = new DataContractJsonSerializer(t);

            //Подготовка потока
            JsonStr.Position = 0;

            //Создаём объект из сериализованных данных
            ForSerialization NewObjectFromJSON = JsDS.ReadObject(JsonStr) as ForSerialization;

            MessageBox.Show("Десериализация завершена");


        }

        private void cmd_Compression_Click(object sender, RoutedEventArgs e)
        {
            string DataForCompression = "Данные для сжатия 1 Данные для сжатия 
2 Данные для сжатия 3";
            //Строка для сжатия, записанная в массив байтов
            Byte[] BytesFromString = System.Text.Encoding.UTF8.GetBytes(DataForCompression);

            //Новый массив, содержащий сжатую строку
            byte[] CompressedData = GZipStream.CompressString(DataForCompression);
            //Строка, восстановленная из сжатых данных
            string Uncompressed = GZipStream.UncompressString(CompressedData);

            MessageBox.Show("Размеры байтовых массивов. Для исходной строки: " + BytesFromString.Length.ToString() + " байт. 
При сжатии: " + CompressedData.Length.ToString() + " байт");
            MessageBox.Show("Исходная строка: (" + DataForCompression + "), строка, 
полученная после сжатия и распаковки: (" + Uncompressed + ").");
        }
    }
}
Листинг 27.2. Код файла MainPage.xaml.cs
< Лекция 18 || Самостоятельная работа 7: 123 || Самостоятельная работа 8 >