51) [Serializable] public class UserPrefs { public string WindowColor; public int FontSize; } 52) Листинг 20.20 static void Main(string[] args) { UserPrefs.

Slides:



Advertisements
Similar presentations
Continuation of chapter 6…. Nested while loop A while loop used within another while loop is called nested while loop. Q. An illustration to generate.
Advertisements

1 Nordjyllands Erhvervakademi Web Services Purpose Examples of Web Services Architecture Web Services in.Net.
C# Language Report By Trevor Adams. Language History Developed by Microsoft Developed by Microsoft Principal Software Architect Principal Software Architect.
EXtreme Programming XP Тема 10. XP 1. Контроллеры (SimpleFormController, UrlFilenameViewController); 2. Модель и представление соединяются посредством.
Object Oriented Programming Files and Streams Dr. Mike Spann
C# - Files and Streams Outline Files and Streams Classes File and Directory Creating a Sequential-Access File Reading Data from a Sequential-Access.
Serialization objects created in a program reside in RAM through references object o; heap stack content.
ООП Классы. Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Portable binary serialization, the Google way
ООП Классы – 2. Ссылки Ссылка – еще одно имя объекта. Используйте ссылки вместо указателя. Это более безопасно. Complex c(10,10); Complex c2& = c; c2+=10;
Язык JavaScript Скриптовый язык для выполнения на html-страницах.
Ввод-вывод в C# Сериализация.
History, Architecture, and Implementation of the CLR Serialization and Formatter Classes Peter de Jong April 24, 2003.
Пользовательские действия (custom actions) в JSP. JSTL.
Формы в HTML. Элемент FORM Элемент уровня «блок» Управляющие элементы Просто текст Атрибуты: action – url обработчика method – post или get enctype –
Демидов А.В г. Операционные системы Лекция 4 Работа с файлами.
Управляемые провайдеры ADO.NET Подключение к базам данных.
Creating Sequential-Access File  Serializable attribute indicates to the compiler that objects of a class can be serialized– written to or read from a.
XML - расширенный язык разметки Моисеевой О. Макушиной Д. (eXtensible Markup Language)
Sequential-access file Create, read and write an object into a sequential-access file Serialize and deserialize the object to write and read from a data.
XML Схемы XML документов. XML Schema созданая Microsoft позволяет избавиться от DTD блоков. Основа – использование пространств имен и очень точная типизация.
Crossword Puzzle Solver Michael Keefe. Solver structure.
Windows Programming Using C# Windows Services, Serialization, and Isolated Storage.
Introduction to Classes and Objects (Through Ch 5) Dr. John P. Abraham Professor UTPA.
1 Binary Files ผศ. ดร. หมัดอามีน หมันหลิน Faculty of IST, MUT
Advanced .NET Programming I 13th Lecture
Fun with Attributes for the Novice and Expert Scott Reed Brain Hz Software (760)
BIM313 – Advanced Programming Techniques Object-Oriented Programming 1.
HeuristicLab. Motivation  less memory pressure no DOM single pass linear process  less developer effort no interfaces to implement  modularity & flexibility.
C# B 1 CSC 298 Writing a C# application. C# B 2 A first C# application // Display Hello, world on the screen public class HelloWorld { public static void.
Serialization  What is Serialization?  System.Serialization  Scenarios in Serialization  Basic Serialization  Custom Serialization.
1 UCN TB /IT 2011 Architecture Bindings –http –tcp –Msmq Serialization part 1 –With [DataContract] Running the services –In your own program –As a webservice.
CSCI 3328 Object Oriented Programming in C# Chapter 3: Introduction to Classes and Objects UTPA – Fall
Session 08 Module 14: Generics and Iterator Module 15: Anonymous & partial class & Nullable type.
Serialization What is Serialization Serialization is the process of converting an object, or a connected graph of objects, stored within computer memory,
The Role of .NET Exception Handling
КРУПНЕЙШАЯ ТЕХНИЧЕСКАЯ КОНФЕРЕНЦИЯ MICROSOFT В УКРАИНЕ Metro приложения: работа с данными Краковецкий Александр, MVP/RD/PhD. DevRain Solutions.
Lecture 19 Serialization Richard Gesick. Serialization Sometimes it is easier to read or write entire objects than to read and write individual fields.
1 Interfaces and Abstract Classes Chapter Objectives You will be able to: Write Interface definitions and class definitions that implement them.
CS360 Windows Programming
HTTP ANDROID CLUB 2015.
BIM313 – Advanced Programming File Operations 1. Contents Structure of a File Reading/Writing Texts from/to Files File and Directory Operations 2.
Object Serialization.  When the data was output to disk, certain information was lost, such as the type of each value.  If the value "3" is read from.
Microsoft.NET Вторая лекция. Reference and value types public class RefType { } public struct ValueType : IDisposable { public int A, B; public ValueType(int.
Anekdot ANDROID CLUB Сегодня  Navigation Drawer  CardView  Calligraphy  TextToSpeech.
Input and Output 23: Input and Output
CSC 298 Streams and files.
Chapter One Lesson Three DATA TYPES ©
Chapter 21 – Files and Streams 1 Outline Files and Streams Classes File and Directory Creating a Sequential-Access File Reading Data from a Sequential-Access.
Enum,Structure and Nullable Types Ashima Wadhwa. Enumerations, Enumerations, or enums, are used to group named constants similar to how they are used.
.NET XML Web Services by Joe Mayo Mayo Software Consulting
CSCI 3328 Object Oriented Programming in C# Chapter 11: Files and Streams 1 Xiang Lian The University of Texas Rio Grande Valley Edinburg, TX 78539
.NET Framework Advanced Topics Name Title Department Company.
C# — Console Application
Input and Output 23: Input and Output
Advanced .NET Programming II 6th Lecture
Tashkent Weather ANDROID CLUB 2015.
Serialization.
Lectures 12 Files & Streams Dr. Eng. Ibrahim El-Nahry.
CSCI 3328 Object Oriented Programming in C# Chapter 3: Introduction to Classes and Objects UTPA – Fall 2012 This set of slides is revised from lecture.
Object Oriented Programming
class PrintOnetoTen { public static void main(String args[]) {
Podcast Ch23f Title: Serialization
The important features of OOP related to C#:
Module 2 Variables, Assignment, and Data Types
Fundaments of Game Design
Сортировка, поиск и фильтрация данных в базе данных и выборках
CSCI 3328 Object Oriented Programming in C# Chapter 11: Files and Streams UTPA – Fall 2012 This set of slides is revised from lecture slides of Prof.
Quiz Points 3 Rules Raise your hand if you know the question
Chapter 11 Saving Data and Objects In Files
Presentation transcript:

51) [Serializable] public class UserPrefs { public string WindowColor; public int FontSize; } 52) Листинг static void Main(string[] args) { UserPrefs userData = new UserPrefs (); userData.WindowColor = "Yellow"; userData.FontSize = "50"; // BinaryFormatter сохраняет данные в двоичном формате. // Чтобы получить доступ к BinaryFormatter, // понадобится импортировать // System.Runtime.Serialization.Formatters.Binary. BinaryFormatter binFormat = new BinaryFormatter();

// Сохранить объект в локальном файле. using(Stream fStream = new FileStream("user.dat", FileMode.Create, FileAccess.Write, FileShare.None)) { binFormat.Serialize(fStream, userData); } Console.ReadLine(); } Рисунок 8.4 – Простой граф объектов

53) Саr 3, ref 2], [Radio 2], [JamesBondCar 1, ref 3, ref 2] 54) [Serializable] public class Radio { public bool hasTweeters; public bool hasSubWoofers; public double[] stationPresets; [NonSerialized] public string radioID = "XF-552RR6"; }

55) [Serializable] public class Car { public Radio theRadio = new Radio (); public bool isHatchBack; } [Serializable] public class JamesBondCar : Car { public bool canFly; public bool canSubmerge; }

56) [Serializable] public class Person { // Общедоступное поле. public bool isAlive = true; // Приватное поле. private int personAge = 21; // Общедоступное свойство/приватные данные. private string fName = string.Empty; public string FirstName { get { return fName; } set { fName = value; } }

57) BinaryFormatter SoapFormatter XmlSerializer 58) // Получить доступ к BinaryFormatter в mscorlib.dll. using System.Runtime.Serialization.Formatters.Binary; 59) // Необходима ссылка на // System.Runtime.Serialization.Formatters.Soap.dll! using System.Runtime.Serialization.Formatters.Soap; 60) // Определено внутри System.Xml.dll. using System.Xml.Serialization;

61) public interface IFormatter { SerializationBinder Binder { get; set; } StreamingContext Context { get; set; } ISurrogateSelector SurrogateSelector { get; set; } object Deserialize(Stream serializationStream); void Serialize(Stream serializationStream, object graph); } 62) public interface IRemotingFormatter : IFormatter { object Deserialize (Stream senalizationStream, HeaderHandler handler); void Serialize (Stream senalizationStream, object graph, Header[] headers); }

63) static void SerializeObjectGraph(IFormatter itfFormat, Stream destStream, object graph) { itfFormat.Serialize(destStream, graph); } 64) Листинг 8.22 <al:Person id="ref-l" xmlns:al = " Versionnu3Dl.0.0.0%2Cnu20Culture%3Dneutral^2C^20PublicKeyToken%3Dnull"> true 2K/personAge>

65) Листинг 8.23 <Person xmlns:xsi=" xmlns:xsd=" true 21/PersonAge> 67) Листинг 8.25 static void SaveAsBinaryFormat (object objGraph, string fileName) { // Сохранить объект в файл CarData.dat в двоичном виде. BinaryFormatter binFormat = new BinaryFormatter () ; using(Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { binFormat.Serialize(fStream, objGraph); } Console.WriteLine("=> Saved car in binary format1"); }

66) Листинг 8.24 //Не забудьте импортировать пространства имен // System.Runtime.Serialization.Formatters.Binary // и System.IO static void Main(string[] args) { Console. WriteLine ( "***** Fun with Object Serialization *****\n); // Создать JamesBondCar и установить состояние. JamesBondCar jbc = new JamesBondCar(); jbc.canFly = true; jbc.canSubmerqe = false; jbc.theRadio.stationPresets = new double[]{89.3,105.1, 97.1}; jbc.thePadio.hasTweeters = true; // Сохранить объект в указанном файле в двоичном формате. SaveAsBinaryFormat(jbc, "CarData.dat"); Console.ReadLine(); }

68) Листинг 8.26 static void LoadFromBinaryFile (string fileName) { BinaryFormatter binFormat = new BinaryFormatter(); // Прочитать JamesBondCar из двоичного файла. using(Stream fStream = File.OpenRead(fileName)) { JamesBondCar carFromDisk = (JamesBondCar)binFormat.Deserialize(fStream); Console.WriteLine ("Can this car fly? : {0}", carFromDisk.canFly); }

Рисунок 8.5 – Объект JamesBondCar, сериализованный с использованием BynaryFormatter

70) Листинг 8.27 // Не забудьте импортировать пространства имен // System.Runtime.Serialization.Formatters.Soap // и установить ссылку на // System.Runtime.Serialization.Formatters.Soap.dll! static void SaveAsSoapFormat (object objGraph, string fileName) { // Сохранить объект в файл CarData.soap в формате SOAP. SoapFormatter soapFormat = new SoapFormatter(); using(Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { soapFormat.Serialize(fStream, objGraph); } Console.WriteLine("=> Saved car in SOAP format!"); }

Рисунок 8.6 – Объект JamesBondCar, сериализованный с использованием SoapFormatter

72) Листинг 8.28 static void SaveAsXmlFormat (object objGraph, string fileName) { // Сохранить объект в файле CarData.xml в формате XML. XmlSerializer xmlFormat = new XmlSerializer(typeof(JamesBondCar), new Type[] { typeof(Radio), typeof(Car) }); using(Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { xmlFormat.Serialize(fStream, objGraph); } Console.WriteLine("=> Saved car in XML format!"); }

73) Листинг 8.29 <JamesBondCar xmlns:xsi=" xmlns:xsd=" true false /double> 97.1/double> XF-552RR6 false true false

АтрибутНазначение [XmlAttribute] Поле или свойство будет сериализовано как атрибут XML (а не как подэлемент) [XmlElement] Поле или свойство будет сериализовано как элемент XML с указанным именем [XmlEnum] Этот атрибут предоставляет имя элемента, являющегося членом перечисления [XmlRoot] Этот атрибут управляет тем, как будет сконструирован корневой элемент (пространство имен и название элемента) [XmlText] Свойство или поле должно быть сериализовано как текст XML (т. е. содержимое, находящееся между начальным и конечным дескрипторами корневого элемента [XmlType] Этот атрибут представляет имя и пространство имен типа XML Таблица 8.12 – Избранные атрибуты из пространства имен System.Xml.Serialization

75) Листинг 8.30 <JamesBondCar xmlns:xsi= " xmlns:xsd=" true false 76) Листинг 8.31 [XmlRoot(Namespace = " public class JamesBondCar : Car { [XmlAttribute] public bool canFly; [XmlAttribute] public bool canSubmerge; ]

77) Листинг 8.32 <JamesBondCar xmlns:xsi= xmlns:xsd=" canFly="true" canSubmerge="false" xmlns="http: //www. MyCompany. com">http: //www. MyCompany. com... 78) Листинг 8.33 public interface IFormatter { object Deserialize(Stream serializationStream); void Serialize(Stream serializationStream, object graph); }

79) Листинг 8.34 [Serializable, XmlRoot(Namespace = " public class JamesBondCar : Car { public JamesBondCar (bool skyWorthy, bool seaworthy) { canFly = skyWorthy; canSubmerge = seaworthy; } // XmlSerializer требует конструктора по умолчанию public JamesBondCar(){}... }

80) Листинг 8.35 static void SaveListOfCars () { // Сохранить список List объектов JamesBondCar. List myCars = new List (); myCars.Add(new JamesBondCar(true, true)); myCars.Add(new JamesBondCar(true, false)); myCars.Add(new JamesBondCar(false, true)); myCars.Add(new JamesBondCar(false, false)); using(Stream fStream = new FileStream("CarCollection.xml", FileMode.Create, FileAccess.Write, FileShare.None)) { XmlSerializer xmlFormat = new XmlSerializer(typeof(List )); xmlFormat.Serialize(fStream, myCars); } Console.WriteLine("=> Saved list of cars'"); }

81) Листинг 8.36 static void SaveListOfCarsAsBinary() { // Сохранить объект ArrayList (myCars) в двоичном виде. List myCars = new List (); BinaryFormatter binFormat = new BinaryFormatter(); using(Stream fStream = new FileStream("AllMyCars.dat", FileMode.Create, FileAccess.Write, FileShare.None)) { binFormat.Serialize(fStream, myCars); } Console.WriteLine( "=> Saved list of cars in binary1"); }

ТипНазначение ISerializable Этот интерфейс может быть реализован на типе [Serializable] для управления его сериализацией и десериализацией ObjectIDGenerator Этот тип генерирует идентификаторы для членов графа объектов [OnDeserialized] Этот атрибут позволяет указать метод, который будет вызван немедленно после десериализации объекта [OnDeserializing] Этот атрибут позволяет указать метод, который будет вызван перед процессом десериализации [OnSerialized] Этот атрибут позволяет указать метод, который будет вызван немедленно после того, как объект сериализован [OnSerializing] Этот атрибут позволяет указать метод, который будет вызван перед процессом сериализации [OptionalField] Этот атрибут позволяет определить поле типа, которое может быть пропущено в указанном потоке SerializationInfo По существу это “мешок свойств”, который поддерживает пары “имя/значение“, представляющие состояние объекта во время процесса сериализации Таблица 8.13 – Основные типы пространства имен System.Xml.Serialization

83) // Чтобы вмешаться в процесс сериализации, // необходимо реализовать ISerializable. public interface ISerializable { void GetObjectData(Serializationlnfo info, StreamingContext context); } 84) Листинг 8.37 public sealed class SerializationInfo { public Serializationlnfo(Type type, IFormatterConverter converter); public string AssemblyName { get; set; } public string FullTypeName { get; set; } public int MemberCount { get; ) public void AddValue(string name, short value); public void AddValue(string name, ushort value); public void AddValue(string name, int value);... }

85) // Необходимо предусмотреть специальный конструктор с // такой сигнатурой, чтобы позволить исполняющей // среде устанавливать состояние объекта. [Serializable] class SomeClass : ISerializable { protected SomeClass (Serializationlnfo si, StreamingContext ctx) {...}... } 86) public enum StreamingContextStates { CrossProcess, CrossMachine, File, Persistence, Remoting,

Other, Clone, CrossAppDomain, All } 87) Листинг 8.38 [Serializable] class StringData : ISerializable { private string dataltemOne = "First data block"; private string dataItemTwo= "More data"; public StringData () {} protected StringData(Serializationlnfo si, StreamingContext ctx) { // Восстановить переменные-члены из потока. dataltemOne = si.GetString("First_Item").ToLower() ;

dataltemTwo = si.GetString("dataltemTwo".ToLower(); } void ISerializable.GetObjectData(Serializationlnfo info, StreamingContext ctx) { // Наполнить объект Serializationlnfo //форматированными данными. infо.AddValue("First_Itern", dataltemOne.ToUpper()); info.AddValue("dataltemTwo", dataltemTwo.ToUpper ()); }

88) Листинг 8.39 static void Main(string[] args) { Console.WriteLine ( "***** Fun with Custom Serialization *****"); // Вспомните, что этот тип реализует ISerializable. StringData myData = new StringData(); // Сохранить в локальный файл в формате SOAP. SoapFormatter soapFormat = new SoapFormatter(); using(Stream fStream = new FileStream("MyData.soap", FileMode.Create, FileAccess.Write, FileShare.None)) { soapFormat.Serialize(fStream, myData); } Console.ReadLine(); }

89) Листинг 8.40 <SOAP-ENV:Envelope xmlns:xsi="http// instance" xmlns:xsd=" xmlns:SOAP-ENC=" xmlns:SOAP-ENC=" xmlns:clr=" SOAP-ENV:encodingStyle= " FIRST DATA BLOCK MORE DATA

90) Листинг 8.41 [Serializable] class MoreData { private string dataltemOne = "First data block"; private string dataItemTwo= "More data"; [OnSerializing] private void OnSerializing(StreamingContext context) { // Вызывается во время процесса сериализации. dataltemOne = dataltemOne.ToUpper(); dataltemTwo = dataltemTwo.ToUpper (); } [OnDeserialized] private void OnDeserialized(StreamingContext context) { // Вызывается по завершении процесса десериализации. dataltemOne = dataltemOne.ToLower (); dataltemTwo = dataltemTwo.ToLower (); }