Klasa XMLSerializer — przykład
W przykładzie XmlSerializer pokazano, jak serializować i deserializować typy zgodne z programem XmlSerializer. Domyślnym formatatorem DataContractSerializer programu Windows Communication Foundation (WCF) jest klasa . Klasa XmlSerializer może służyć do serializacji i deserializacji typów, gdy DataContractSerializer nie można użyć klasy. Jest to często przypadek, gdy wymagana jest dokładna kontrola nad kodem XML — na przykład jeśli element danych musi być atrybutem XML, a nie elementem XML. XmlSerializer Ponadto często są automatycznie wybierane podczas tworzenia klientów dla usług innych niż WCF.
W tym przykładzie klient jest aplikacją konsolową (.exe), a usługa jest hostowana przez usługi Internet Information Services (IIS).
Uwaga
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
Element ServiceContractAttribute i XmlSerializerFormatAttribute należy zastosować do interfejsu, jak pokazano w poniższym przykładowym kodzie.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"), XmlSerializerFormat]
public interface IXmlSerializerCalculator
{
[OperationContract]
ComplexNumber Add(ComplexNumber n1, ComplexNumber n2);
[OperationContract]
ComplexNumber Subtract(ComplexNumber n1, ComplexNumber n2);
[OperationContract]
ComplexNumber Multiply(ComplexNumber n1, ComplexNumber n2);
[OperationContract]
ComplexNumber Divide(ComplexNumber n1, ComplexNumber n2);
}
Publiczne elementy członkowskie ComplexNumber
klasy są serializowane przez XmlSerializer atrybuty XML. Nie DataContractSerializer można użyć elementu do utworzenia tego rodzaju wystąpienia XML.
public class ComplexNumber
{
private double real;
private double imaginary;
[XmlAttribute]
public double Real
{
get { return real; }
set { real = value; }
}
[XmlAttribute]
public double Imaginary
{
get { return imaginary; }
set { imaginary = value; }
}
public ComplexNumber(double real, double imaginary)
{
this.Real = real;
this.Imaginary = imaginary;
}
public ComplexNumber()
{
this.Real = 0;
this.Imaginary = 0;
}
}
Implementacja usługi oblicza i zwraca odpowiedni wynik — akceptuje i zwraca wartości ComplexNumber
typu.
public class XmlSerializerCalculatorService : IXmlSerializerCalculator
{
public ComplexNumber Add(ComplexNumber n1, ComplexNumber n2)
{
return new ComplexNumber(n1.Real + n2.Real, n1.Imaginary +
n2.Imaginary);
}
…
}
Implementacja klienta używa również liczb złożonych. Zarówno kontrakt usługi, jak i typy danych są zdefiniowane w pliku źródłowym generatedClient.cs, który został wygenerowany przez narzędzie ServiceModel Metadata Utility Tool (Svcutil.exe) z metadanych usługi. Svcutil.exe może wykryć, kiedy kontrakt nie jest serializowalny przez DataContractSerializer element i przywraca emitowanie XmlSerializable
typów w tym przypadku. Jeśli chcesz wymusić użycie XmlSerializerpolecenia , możesz przekazać /serializer:XmlSerializer (użyj polecenia XmlSerializer) do narzędzia Svcutil.exe.
// Create a client.
XmlSerializerCalculatorClient client = new
XmlSerializerCalculatorClient();
// Call the Add service operation.
ComplexNumber value1 = new ComplexNumber();
value1.Real = 1;
value1.Imaginary = 2;
ComplexNumber value2 = new ComplexNumber();
value2.Real = 3;
value2.Imaginary = 4;
ComplexNumber result = client.Add(value1, value2);
Console.WriteLine("Add({0} + {1}i, {2} + {3}i) = {4} + {5}i",
value1.Real, value1.Imaginary, value2.Real, value2.Imaginary,
result.Real, result.Imaginary);
…
}
Po uruchomieniu przykładu żądania operacji i odpowiedzi są wyświetlane w oknie konsoli klienta. Naciśnij klawisz ENTER w oknie klienta, aby zamknąć klienta.
Add(1 + 2i, 3 + 4i) = 4 + 6i
Subtract(1 + 2i, 3 + 4i) = -2 + -2i
Multiply(2 + 3i, 4 + 7i) = -13 + 26i
Divide(3 + 7i, 5 + -2i) = 0.0344827586206897 + 1.41379310344828i
Press <ENTER> to terminate client.
Aby skonfigurować, skompilować i uruchomić przykład
Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).
Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.