Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ukázkový příklad DataContractSerializer demonstrujeDataContractSerializer, který provádí obecné služby serializace a deserializace pro třídy datových kontraktů. Ukázka vytvoří Record objekt, serializuje ho do datového proudu paměti a deserializuje datový proud paměti zpět do jiného Record objektu, aby demonstrovala použití DataContractSerializer. Příklad pak serializuje Record objekt pomocí binárního zapisovače, aby ukázal, jak zapisovač má vliv na serializaci.
Poznámka:
Postup nastavení a pokyny k sestavení pro tuto ukázku najdete na konci tohoto tématu.
Kontrakt dat pro Record je uvedený v následujícím vzorovém kódu.
[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}";
}
}
Vzorový kód vytvoří Record objekt s názvem record1 a pak objekt zobrazí.
Record record1 = new Record(1, 2, "+", 3);
Console.WriteLine("Original record: {0}", record1.ToString());
Ukázka pak použije DataContractSerializer k serializaci record1 do datového proudu paměti.
MemoryStream stream1 = new MemoryStream();
//Serialize the Record object to a memory stream using DataContractSerializer.
DataContractSerializer serializer = new DataContractSerializer(typeof(Record));
serializer.WriteObject(stream1, record1);
V dalším kroku ukázka použije DataContractSerializer k deserializaci datového proudu paměti zpět do nového Record objektu a zobrazí ho.
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());
Ve výchozím nastavení DataContractSerializer kóduje objekty do datového proudu pomocí textové reprezentace XML. Kódování XML však můžete ovlivnit předáním jiného zapisovače. Ukázka vytvoří binární zapisovač voláním CreateBinaryWriter. Poté při volání WriteObjectContent předá zapisovač a objekt záznamu serializátoru. Nakonec vzorek vyprázdní zapisovač a informuje o délce datových proudů.
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);
Při spuštění ukázky se zobrazí původní záznam a deserializovaný záznam, za nímž následuje porovnání délky kódování textu a binárního kódování. Stisknutím klávesy ENTER v okně klienta klienta ukončete klienta.
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.
Jak nastavit, sestavit a spustit ukázku
Ujistěte se, že jste provedli instalační proceduru One-Time pro ukázky Windows Communication Foundation.
Pokud chcete sestavit verzi C# nebo Visual Basic .NET řešení, postupujte podle pokynů v Sestavení ukázek Windows Communication Foundation.
Pokud chcete ukázku spustit, spusťte klienta z příkazového řádku zadáním klienta\bin\client.exe.