Question

J'ai un service WCF hébergé pour les clients internes - nous contrôlons tous les clients. Nous allons donc utiliser une bibliothèque de contrats de données pour éliminer le besoin de génération de proxy. Je voudrais utiliser certaines propriétés en lecture seule et avoir des contrats de données sans constructeurs par défaut. Merci pour votre aide ...

Était-ce utile?

La solution

Les propriétés en lecture seule sont correctes tant que vous marquez le champ (non en lecture seule) comme étant le [DataMember], pas la propriété. Contrairement à XmlSerializer, IIRC DataContractSerializer n'utilise pas le ctor par défaut. Il utilise un mécanisme de réflexion distinct pour créer des instances non initialisées. Sauf sur les mono & Olive " (Port WCF), où il utilise le ctor par défaut (pour le moment ou à un moment donné dans le passé récent).

Exemple:

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);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top