Delen via


Voorbeeld van DataContractSerializer

Het DataContractSerializer-voorbeeld demonstreert het DataContractSerializer, waarmee algemene serialisatie- en deserialisatieservices voor de gegevenscontractklassen worden uitgevoerd. Het voorbeeld maakt een Record object, serialiseert het naar een geheugenstroom en ontserialiseerd de geheugenstroom terug naar een ander Record object om het gebruik van het DataContractSerializerobject te demonstreren. Het voorbeeld serialiseert vervolgens het Record object met behulp van een binaire schrijver om te laten zien hoe de schrijver van invloed is op serialisatie.

Notitie

De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.

Het gegevenscontract voor Record wordt weergegeven in de volgende voorbeeldcode.

[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}";
    }
}

Met de voorbeeldcode wordt een Record object gemaakt met de naam record1 en wordt vervolgens het object weergegeven.

Record record1 = new Record(1, 2, "+", 3);
Console.WriteLine("Original record: {0}", record1.ToString());

Het voorbeeld gebruikt vervolgens het DataContractSerializer om te serialiseren record1 in een geheugenstroom.

MemoryStream stream1 = new MemoryStream();

//Serialize the Record object to a memory stream using DataContractSerializer.
DataContractSerializer serializer = new DataContractSerializer(typeof(Record));
serializer.WriteObject(stream1, record1);

Vervolgens gebruikt het voorbeeld om DataContractSerializer de geheugenstroom terug te deserialiseren naar een nieuw Record object en wordt het weergegeven.

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());

Standaard codeert de DataContractSerializer objecten in een stroom met behulp van een tekstuele weergave van XML. U kunt de codering van de XML echter beïnvloeden door een andere schrijver door te geven. Het voorbeeld maakt een binaire schrijver door aan te roepen CreateBinaryWriter. Vervolgens worden de schrijver en het recordobject doorgegeven aan de serializer wanneer het aanroept WriteObjectContent. Ten slotte wordt in het voorbeeld de schrijver en rapporten over de lengte van de streams leeggemaakt.

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);

Wanneer u het voorbeeld uitvoert, worden de oorspronkelijke record en de gedeserialiseerde record weergegeven, gevolgd door de vergelijking tussen de lengte van de tekstcodering en de binaire codering. Druk op Enter in het clientvenster om de client af te sluiten.

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.

Het voorbeeld instellen, compileren en uitvoeren

  1. Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.

  2. Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.

  3. Als u het voorbeeld wilt uitvoeren, start u de client vanaf de opdrachtprompt door client\bin\client.exe te typen.