Вопрос

У меня есть служба WCF, размещенная для внутренних клиентов — мы контролируем всех клиентов.Поэтому мы будем использовать библиотеку контрактов данных, чтобы исключить необходимость генерации прокси.Я хотел бы использовать некоторые свойства только для чтения и иметь некоторые контракты данных без конструкторов по умолчанию.Спасибо за вашу помощь...

Это было полезно?

Решение

Свойства только для чтения подходят, если вы помечаете поле (не только для чтения) как [DataMember], а не свойство.В отличие от XmlSerializer, IIRC DataContractSerializer не использует ctor по умолчанию — он использует отдельный механизм отражения для создания неинициализированных экземпляров.Кроме моно"Оливковое" (порт WCF), где он делает используйте вектор по умолчанию (на данный момент или в какой-то момент в недавнем прошлом).

Пример:

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);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top