WCF Datacontracts
-
05-07-2019 - |
Frage
Ich habe einen WCF-Dienst für interne Kunden gehostet - wir alle Kontrolle der Kunden haben. Wir werden daher eine Datenvertrag Bibliothek werden mit der Notwendigkeit einer Proxy-Generierung zu negieren. Ich möchte einige Nur-Lese-Eigenschaften verwenden und einige Datacontracts ohne Standardkonstruktoren haben. Danke für Ihre Hilfe ...
Lösung
Read-only-Eigenschaften sind in Ordnung, solange Sie das (nicht nur lesbar) Feld als [Datamember] markieren, nicht das Eigentum. Im Gegensatz zu XmlSerializer, hat IIRC DataContractSerializer nicht den Standard-Ctor verwenden - es verwendet einen separaten Reflexionsmechanismus auf nicht initialisierten Instanzen zu erstellen. Außer auf Monos " Olive " (WCF-Port), wo es hat verwenden Sie den Standard ctor (im Moment, oder zu einem bestimmten Zeitpunkt in der jüngsten Vergangenheit).
Beispiel:
using System;
using System.IO;
using System.Runtime.Serialization;
[DataContract]
class Foo
{
[DataMember(Name="Bar")]
private string bar;
public string Bar { get { return bar; } }
public Foo(string bar) { this.bar = bar; }
}
static class Program
{
static void Main()
{
DataContractSerializer dcs = new DataContractSerializer(typeof(Foo));
MemoryStream ms = new MemoryStream();
Foo orig = new Foo("abc");
dcs.WriteObject(ms, orig);
ms.Position = 0;
Foo clone = (Foo)dcs.ReadObject(ms);
Console.WriteLine(clone.Bar);
}
}