Разделение интерфейса в WCF для JSON - PullRequest
0 голосов
/ 09 июля 2011

Я новичок в WCF. Мне было интересно, можем ли мы получить свойства из базового интерфейса в выводе REST.

Пожалуйста, рассмотрите следующую структуру. Продукт включает в себя IVenueView не место. Возможно ли иметь только Venue.Id в ответе JSON продукта?

[DataContract]
public class Product {
        [DataMember]
        public Guid? Id { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public IVenueView Venue { get; set; }
}

public interface IVenueView {
        [DataMember]
        Guid? Id { get; set; }
}

[DataContract]
public class Venue : IVenueView
{
        [DataMember]
        public Guid? Id { get; set; }
        [DataMember]
        public string Name { get; set; }
} 

Ответы [ 2 ]

0 голосов
/ 09 июля 2011

Нет, это невозможно, потому что сериализация и десериализация работают с реализацией (фактическими данными), а не с интерфейсами.Более того, для чистой сериализации вам нужно использовать что-то вроде:

[DataContract]
[KnownType(typeof(Venue))]
public class Product
{
    [DataMember]
    public Guid? Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public IVenueView Venue { get; set; }
}
0 голосов
/ 09 июля 2011

Данные контракты - все о данных - интерфейсы определяют поведение, поэтому они не очень хорошо перемешиваются.Контракт с данными, который у вас, вероятно, не будет работать (поскольку сериализатор не «знает» о типе Venue (он знает только о IVenueView), он не сможет сериализовать / десериализовать экземпляры Product.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...