Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A DataContractSerializer minta az adatszerződés-osztályok általános szerializálási és deszerializálási szolgáltatásait mutatja be DataContractSerializer. A minta létrehoz egy Record objektumot, szerializálja azt egy memóriastreambe, és deszerializálja a memóriastreamet egy másik Record objektumba, hogy bemutassa a DataContractSerializerhasználatát. A minta ezután bináris íróval szerializálja az Record objektumot annak bemutatásához, hogy az író hogyan befolyásolja a szerializálást.
Megjegyzés:
A minta telepítési eljárása és összeállítási utasításai a témakör végén találhatók.
Az adatszerződés az Record alábbi mintakódban jelenik meg.
[DataContract(Namespace="http://Microsoft.ServiceModel.Samples")]
internal class Record
{
private double n1;
private double n2;
private string operation;
private double result;
internal Record(double n1, double n2, string operation, double result)
{
this.n1 = n1;
this.n2 = n2;
this.operation = operation;
this.result = result;
}
[DataMember]
internal double OperandNumberOne
{
get { return n1; }
set { n1 = value; }
}
[DataMember]
internal double OperandNumberTwo
{
get { return n2; }
set { n2 = value; }
}
[DataMember]
internal string Operation
{
get { return operation; }
set { operation = value; }
}
[DataMember]
internal double Result
{
get { return result; }
set { result = value; }
}
public override string ToString()
{
return $"Record: {n1} {operation} {n2} = {result}";
}
}
A mintakód létrehoz egy Record elnevezett record1 objektumot, majd megjeleníti az objektumot.
Record record1 = new Record(1, 2, "+", 3);
Console.WriteLine("Original record: {0}", record1.ToString());
A minta ezután egy memóriafolyamot használ a DataContractSerializer szerializálásához record1.
MemoryStream stream1 = new MemoryStream();
//Serialize the Record object to a memory stream using DataContractSerializer.
DataContractSerializer serializer = new DataContractSerializer(typeof(Record));
serializer.WriteObject(stream1, record1);
Ezután a minta a DataContractSerializer memóriafolyamot deszerializálja vissza egy új Record objektumba, és megjeleníti.
stream1.Position = 0;
//Deserialize the Record object back into a new record object.
Record record2 = (Record)serializer.ReadObject(stream1);
Console.WriteLine("Deserialized record: {0}", record2.ToString());
Alapértelmezés szerint az DataContractSerializer egy streambe kódolja az objektumokat XML szöveges formátumban. Az XML kódolását azonban egy másik íróval is befolyásolhatja. A minta CreateBinaryWriter meghívásával hoz létre egy bináris írót. Ezután átadja az írót és a rekordobjektumot a szerializálónak, amikor meghívja a WriteObjectContent függvényt. Végül a minta kiüríti az író pufferét, és beszámol az adatfolyamok hosszáról.
MemoryStream stream2 = new MemoryStream();
XmlDictionaryWriter binaryDictionaryWriter = XmlDictionaryWriter.CreateBinaryWriter(stream2);
serializer.WriteObject(binaryDictionaryWriter, record1);
binaryDictionaryWriter.Flush();
//report the length of the streams
Console.WriteLine("Text Stream is {0} bytes long", stream1.Length);
Console.WriteLine("Binary Stream is {0} bytes long", stream2.Length);
A minta futtatásakor megjelenik az eredeti rekord és a deszerializált rekord, majd a szövegkódolás hossza és a bináris kódolás összehasonlítása. Nyomja le az ENTER billentyűt az ügyfélablakban az ügyfél leállításához.
Original record: Record: 1 + 2 = 3
Deserialized record: Record: 1 + 2 = 3
Text Stream is 233 bytes long
Binary Stream is 156 bytes long
Press <ENTER> to terminate client.
A példa beállítása, elkészítése és futtatása
Győződjön meg arról, hogy elvégezte a Windows Communication Foundation-minták One-Time beállítási eljárását.
A megoldás C# vagy Visual Basic .NET kiadásának létrehozásához kövesse Windows Communication Foundation-mintákcímű témakör utasításait.
A minta futtatásához indítsa el az ügyfelet a parancssorból az ügyfél\bin\client.exebeírásával.