WCF中JSON的接口隔离

WCF中JSON的接口隔离,wcf,json,interface,properties,Wcf,Json,Interface,Properties,我是WCF的新手。我想知道我们是否可以在REST输出中从基本接口检索属性 请考虑以下结构。产品包括iVenuView,而不是场地。是否可以在产品JSON响应中仅包含vention.Id [DataContract] public class Product { [DataMember] public Guid? Id { get; set; } [DataMember] public string Name { get; set;

我是WCF的新手。我想知道我们是否可以在REST输出中从基本接口检索属性

请考虑以下结构。产品包括iVenuView,而不是场地。是否可以在产品JSON响应中仅包含vention.Id

[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; }
} 

数据合同都是关于数据的——接口定义了行为,因此它们不会真正混淆。您拥有的数据约定可能不起作用(因为序列化程序不“知道”场地类型(它只知道IVenueView),它将无法序列化/反序列化产品实例。

不,这是不可能的,因为序列化和反序列化与实现一起工作(实际数据)不使用接口。此外,对于纯序列化,您必须使用以下内容:

[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; }
}
这不起作用。使用svcuti.exe时,客户端中的场地属性为object类型。