我会尝试使用protobuf-net r.282来进行WCF。好的,我会为我的合同打上ProtoBehavior属性。
下一步,- 数据传输对象(DTO):
[OperationContract,ProtoBehavior]
[FaultContract(typeof(ServiceFaultException))]
Dictionary<ActivityCategoryDTO, SalesTemplateDTO> GetSalesTemplates();
[OperationContract, ProtoBehavior]
[FaultContract(typeof(ServiceFaultException))]
List<ActivityCategoryDTO> GetActivities();
下一步,- 数据传输对象(DTO):
[DataContract]
[Serializable]
[ProtoContract]
public class ActivityCategoryDTO
{
[DataMember]
[ProtoMember(1)]
public int Id { get; set; }
[DataMember]
[ProtoMember(2)]
public string Guid { get; set; }
[DataMember]
[ProtoMember(3)]
public string Name { get; set; }
}
我尝试从客户端调用此服务。当我调用GetSalesTemplates时,一切正常。我成功反序列化了字典,但是当我调用GetActivities时,在客户端得到了null。
通过fiddler我看到数据传输成功,所以我认为这是反序列化器的问题。
怎么了?我怎样才能在客户端获取列表?
编辑
似乎我遇到了所有列表的问题 :)
[DataContract]
[Serializable]
[ProtoContract]
public class SalesTemplateDTO
{
[ProtoMember(1)]
[DataMember]
public string Name { get; set; }
[ProtoMember(2)]
public List<FieldTemplateDTO> Fields;
}
只有名称,字段列表为空,数据已全部传输,客户端收到了数据。