Csharp/C Sharp/File Stream/Serialization SOAP — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Версия 18:31, 26 мая 2010

Serialize Class to Soap message

<source lang="csharp"> using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Soap; public class Serializer {

 public static void Main(string [] args) {
   StudentList personnel = CreateStudentList();
   IFormatter soapFormatter = new SoapFormatter();
   using (FileStream stream = File.OpenWrite("StudentListSoap.xml")) {
     soapFormatter.Serialize(stream,personnel);
   }
 }
 
 private static StudentList CreateStudentList() {
   StudentList personnel = new StudentList();
   personnel.Students = new Employee [] {new Employee()};
   personnel.Students[0].FirstName = "Apple";
   personnel.Students[0].MiddleInitial = "M";
   personnel.Students[0].LastName = "Bear";
   
   personnel.Students[0].Addresses = new Address [] {new Address()};
   personnel.Students[0].Addresses[0].AddressType = AddressType.Home;
   personnel.Students[0].Addresses[0].Street = new string [] {"Culloden"};
   personnel.Students[0].Addresses[0].City = "Vancouver";
   personnel.Students[0].Addresses[0].State = State.BC;
   personnel.Students[0].Addresses[0].Zip = "V5V 4X7";
   
   personnel.Students[0].StartDate = new DateTime(2006,10,12);
   
   return personnel;
 }

} [Serializable] public enum AddressType {

 Home,
 Office

} [Serializable] public enum State {

 BC, ON

} [Serializable] public class Address {

 public AddressType AddressType;
 public string[] Street;
 public string City;
 public State State;
 public string Zip;

} [Serializable] public class TelephoneNumber {

 public string AreaCode;
 public string Exchange;
 public string Number;

} [Serializable] public class Employee {

 public string FirstName;
 public string MiddleInitial;
 public string LastName;
 public Address [] Addresses;
 public TelephoneNumber [] TelephoneNumbers;
 public DateTime StartDate;

} [Serializable] public class StudentList {

 public Employee [] Students;

}

      </source>


Serialize to SOAP based XML file

<source lang="csharp">

   using System;
 using System.IO;
 using System.Runtime.Serialization.Formatters.Binary;
 using System.Runtime.Serialization.Formatters.Soap;
 
   public class RoomApp
   {
   public static void Main()
   {
     // Make a room and listen to the tunes.
     Console.WriteLine("Made a My Room...");
     MyRoom myAuto = new MyRoom("My", 50, false, true);
     myAuto.TurnOnRadio(true);
     myAuto.GoUnderWater();
     // Save the same room into SOAP format.
     Console.WriteLine("Now saving room to XML file");
     FileStream myStream = File.Create("RoomData.xml");
     SoapFormatter myXMLFormat = new SoapFormatter();
     myXMLFormat.Serialize(myStream, myAuto);
     myStream.Close();
     // Read in the Room from the XML file.
     Console.WriteLine("Reading room from XML file.");
     myStream = File.OpenRead("RoomData.xml");
     MyRoom roomFromXML = (MyRoom)myXMLFormat.Deserialize(myStream);
     Console.WriteLine(roomFromXML.PetName + " is alive!");
     roomFromXML.TurnOnRadio(true);
     myStream.Close();
     
   }
   }  
 
 
 [Serializable]
   public class Radio
   {
   [NonSerialized]
   private int objectIDNumber = 9;
       public Radio(){}
   public void On(bool state)
   {
     if(state == true)
       Console.WriteLine("Music is on...");
     else
       Console.WriteLine("No tunes...");        
   }
   }
 [Serializable]
   public class Room
   {
   protected string petName;
   protected int maxInternetSpeed;
   protected Radio theRadio = new Radio();
       public Room(string petName, int maxInternetSpeed)
       {
     this.petName = petName;
     this.maxInternetSpeed = maxInternetSpeed;
       }
   public Room() {}
   public String PetName
   {
     get { return petName; }
     set { petName = value; }
   }
   public int MaxInternetSpeed
   {
     get { return maxInternetSpeed; }
     set { maxInternetSpeed = value; }
   }
   public void TurnOnRadio(bool state)
   {
     theRadio.On(state);
   }
   }
 [Serializable]
   public class MyRoom : Room
   {
   protected bool isFlightWorthy;
   protected bool isSeaWorthy;
   public MyRoom(string petName, int maxInternetSpeed, 
             bool canFly, bool canSubmerge)
     : base(petName, maxInternetSpeed)
       {
     this.isFlightWorthy = canFly;
     this.isSeaWorthy = canSubmerge;
   }
   public MyRoom(){}
   public void Fly()
   {
     if(isFlightWorthy)
       Console.WriteLine("Taking off!");
     else
       Console.WriteLine("Falling off cliff!");
   }
   public void GoUnderWater()
   {
     if(isSeaWorthy)
       Console.WriteLine("Diving....");
     else
       Console.WriteLine("Drowning!!!");      
   }
   }
   


      </source>


Use SoapFormatter

<source lang="csharp">

using System; using System.IO; using System.Collections; using System.Runtime.Serialization.Formatters.Soap; using System.Runtime.Serialization.Formatters.Binary; class MainClass {

   private static void BinarySerialize(ArrayList list)
   {
       using (FileStream str = File.Create("people.bin"))
       {
           BinaryFormatter bf = new BinaryFormatter();
           bf.Serialize(str, list);
       }
   }
   private static ArrayList BinaryDeserialize()
   {
       ArrayList people = null;
       using (FileStream str = File.OpenRead("people.bin"))
       {
           BinaryFormatter bf = new BinaryFormatter();
           people = (ArrayList)bf.Deserialize(str);
       }
       return people;
   }
   private static void SoapSerialize(ArrayList list)
   {
       using (FileStream str = File.Create("people.soap"))
       {
           SoapFormatter sf = new SoapFormatter();
           sf.Serialize(str, list);
       }
   }
   private static ArrayList SoapDeserialize()
   {
       ArrayList people = null;
       using (FileStream str = File.OpenRead("people.soap"))
       {
           SoapFormatter sf = new SoapFormatter(); 
           people = (ArrayList)sf.Deserialize(str);
       }
       return people;
   }
   public static void Main()
   {
       ArrayList people = new ArrayList();
       people.Add("G");
       people.Add("L");
       people.Add("A");
       BinarySerialize(people);
       SoapSerialize(people);
       ArrayList binaryPeople = BinaryDeserialize();
       ArrayList soapPeople = SoapDeserialize();
       Console.WriteLine("Binary people:");
       foreach (string s in binaryPeople)
       {
           Console.WriteLine("\t" + s);
       }
       Console.WriteLine("\nSOAP people:");
       foreach (string s in soapPeople)
       {
           Console.WriteLine("\t" + s);
       }
   }

}

</source>