|
Sérialisation en SOAP |
|
.NET Framework soutient une technique de sérialisation désignée sous le nom de SOAP (Simple Object Access Protocol) (qui représente le protocole simple d'Accès à d'objet). Cette technique est un peu plus reliée à XML mais, bien que nous n'ayons pas étudié XML, vous n'avez pas besoin de savoir quoi que se soit à son sujet pour utiliser la sérialisation SOAP. |
Sérialiser avec SOAP Pour Sérialiser un objet à l'aide du SOAP, vous suivez les mêmes étapes que nous avons passées en revue pour la Sérialisation binaire avec une addition que vous devez ajouter à une certaine référence. En créant la classe dont les objets seraient Sérialisés, la marquer avec l'attribut [Serializable]. Voici un exemple : [Serializable]
public class Car
{
public string Make;
public string Model;
public uint Year;
public byte Color;
}
Pour soutenir la Sérialisation SOAP, .NET Framework fournit la classe SoapFormatter. Cette classe est définie dans le namespace System.Runtime.Serialization.Formatters.Soap qui fait partie de l'ensemble system.Runtime.Serialization.Formatters.Soap.dll. Afin d'utiliser la classe SoapFormatter, vous devez référencer cette ensemble. Vous pouvez faire ceci en l'ajoutant à votre liste de références. Après ces deux étapes, vous pouvez créer un objet et l'initialiser. Avant de le sauvegarder comme toujours, créez un objet basé sur le Stream qui indiquerait le nom (et l'endroit) du fichier et le type d'action à exécuter. Puis, déclarez une variable SoapFormatter en utilisant son constructeur par défaut. Pour sauvegarder réellement l'objet, appelez la méthode serialize () de cette classe. Cette méthode utilise la même syntaxe que celle de la classe BinaryFormatter : elle prend deux arguments. Le premier est un objet basé sur Stream. La seconde est l'objet qui doit être Sérialisé. Voici un exemple : |
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Soap;
[Serializable]
public class Car
{
public string Make;
public string Model;
public uint Year;
public byte Color;
}
public static class Program
{
public static int Main(string[] args)
{
Car vehicle = new Car();
vehicle.Make = "Volvo";
vehicle.Model = "S40";
vehicle.Year = 2006;
vehicle.Color = 3;
FileStream stmCar =
new FileStream("Car4.car",
FileMode.Create);
SoapFormatter sopCar = new SoapFormatter();
sopCar.Serialize(stmCar, vehicle);
return 0;
}
}
|
|
|
|

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Soap;
namespace PropertyRental1
{
class Program
{
static PropertyListing CreateListing()
{
Random rnd = new Random();
Property prop = new Property();
PropertyListing listing = new PropertyListing();
prop = new Property();
// Create a few properties ready to be rented
prop.PropertyCode = rnd.Next(100000, 999999);
prop.PropertyType = TypeOfProperty.SingleFamily;
prop.PropertyCondition = Condition.Excellent;
prop.Bedrooms = 5;
prop.Bathrooms = 3.5f;
prop.Stories = 3;
prop.MonthlyRent = 2650;
listing[0] = prop;
prop = new Property();
prop.PropertyCode = rnd.Next(100000, 999999);
prop.PropertyType = TypeOfProperty.Townhouse;
prop.PropertyCondition = Condition.Excellent;
prop.Bedrooms = 3;
prop.Bathrooms = 2.5f;
prop.Stories = 3;
prop.MonthlyRent = 1750;
listing[1] = prop;
prop = new Property();
prop.PropertyCode = rnd.Next(100000, 999999);
prop.PropertyType = TypeOfProperty.SingleFamily;
prop.PropertyCondition = Condition.Good;
prop.Bedrooms = 4;
prop.Bathrooms = 2.5f;
prop.Stories = 2;
prop.MonthlyRent = 2450;
listing[2] = prop;
prop = new Property();
prop.PropertyCode = rnd.Next(100000, 999999);
prop.PropertyType = TypeOfProperty.Appartment;
prop.PropertyCondition = Condition.Excellent;
prop.Bedrooms = 1;
prop.Bathrooms = 1.0f;
prop.Stories = 1;
prop.MonthlyRent = 880;
listing[3] = prop;
prop = new Property();
prop.PropertyCode = rnd.Next(100000, 999999);
prop.PropertyType = TypeOfProperty.Townhouse;
prop.PropertyCondition = Condition.Excellent;
prop.Bedrooms = 3;
prop.Bathrooms = 2.5f;
prop.Stories = 2;
prop.MonthlyRent = 1880;
listing[4] = prop;
prop = new Property();
prop.PropertyCode = rnd.Next(100000, 999999);
prop.PropertyType = TypeOfProperty.Appartment;
prop.PropertyCondition = Condition.Good;
prop.Bedrooms = 2;
prop.Bathrooms = 1.0f;
prop.Stories = 1;
prop.MonthlyRent = 1050;
listing[5] = prop;
// Since we don't yet have a complete list of properties
// Create some empty ones
for (int i = 5; i < 100; i++)
{
prop = new Property();
listing[i] = prop;
}
return listing;
}
static int Main()
{
PropertyListing props = CreateListing();
Property prop = new Property();
FileStream prpStream =
new FileStream("properties.rnt",
FileMode.Create);
SoapFormatter prpSoap = new SoapFormatter();
prpSoap.Serialize(prpStream, props);
for (int i = 0; i < 16; i++)
{
prop = props[i];
Console.WriteLine("{0}.----------------------------------", i + 1);
Console.WriteLine("Property #: {0}", prop.PropertyCode);
Console.WriteLine("Type: {0}", prop.PropertyType);
Console.WriteLine("Condition: {0}", prop.PropertyCondition);
Console.WriteLine("Bedrooms: {0}", prop.Bedrooms);
Console.WriteLine("Bathrooms: {0}", prop.Bathrooms);
Console.WriteLine("Stories: {0}", prop.Stories);
Console.WriteLine("Market Value: {0}\n", prop.MonthlyRent);
}
Console.WriteLine("======================================");
return 0;
}
}
}
|
|
Désérialisation en série |
|
la Désérialisation en série dans SOAP est effectuée exactement comme fait pour la Désérialisation en série binaire. Pour la soutenir, la classe SoapFormatter est équipée de la méthode Deserialize (). Cette méthode utilise la même syntaxe que son équivalent de la classe BinaryFormatter. L'approche pour l'utiliser est également identique. Voici un exemple : using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Soap;
[Serializable]
public class Car
{
public string Make;
public string Model;
public uint Year;
public byte Color;
}
public static class Program
{
public static int Main(string[] args)
{
FileStream stmCar =
new FileStream("Car4.car",
FileMode.Open);
SoapFormatter sopCar = new SoapFormatter();
Car vehicle = (Car)sopCar.Deserialize(stmCar);
Console.WriteLine("Car Information");
Console.WriteLine("Make: {0}", vehicle.Make );
Console.WriteLine("Model: {0}", vehicle.Model);
Console.WriteLine("Year: {0}", vehicle.Year);
Console.Write("Color: ");
switch (vehicle.Color)
{
case 1:
Console.WriteLine("Black");
break;
case 2:
Console.WriteLine("Gray");
break;
case 3:
Console.WriteLine("White");
break;
case 4:
Console.WriteLine("Red");
break;
case 5:
Console.WriteLine("Blue");
break;
}
return 0;
}
}
|
|
|
||
| Page d'Accueil | Copyright © 2007, Yevol | |
|
|
||