Sdílet prostřednictvím


Ukázka třídy DataContractSerializer

Ukázka DataContractSerializer demonstruje DataContractSerializer, který provádí obecné serializace a deserializační služby pro třídy kontraktů dat. 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 demonstruje použití DataContractSerializer. Ukázka pak serializuje Record objekt pomocí binárního zapisovače, aby ukázal, jak zapisovač ovlivňuje 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. Pak předá zapisovač a objekt záznamu serializátoru při volání WriteObjectContent. Nakonec ukázka vyprázdní zapisovač a sestavy 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.

Nastavení, sestavení a spuštění ukázky

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

  2. Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.

  3. Pokud chcete ukázku spustit, spusťte klienta z příkazového řádku zadáním client\bin\client.exe.