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 ...

War es hilfreich?

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);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top