条件WCF DataContract序列化

时间:2015-06-05 13:30:45

标签: wcf xml-serialization datacontract

在与WCF合作时,我遇到了一个奇怪的问题。

让我们说,

我有一个学生班

public class Student
{
     [DataMember]
     public int32  ID { get; set; }
     [DataMember]
     public DateTime? CreatedDate  { get; set; }
     [DataMember]
     public Gender Gender { get; set; }
     [DataMember]
     public string Name { get; set; }
}


[OperationContract]
Student GetStudentDetail  (StudentRequest request);

[OperationContract]
Student GetStudent  (StudentDetailRequest request);

我从Student返回一个wcf复杂类型的回复,方法名称为GetStudent(),效果很好。但是在另一个场景中,我还有一个名为GetStudentDetail()的网络方法,其中我希望从Student类返回更多数据库,如:

[DataMember]
public int32 Age{ get; set; }

[DataMember]
public string Location { get; set; } 

如果我在类Datamember中添加新的Student,它会自动显示我不想要的GetStudent()方法的模式响应..实际上我不想返回新的架构中的字段为GetStudent()方法。问题出在这里:我想仅为Student方法公开GetStudentDetail()类的新数据库。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

没有办法实现你想做的事。正如其他评论员所说,您返回的类型是两个服务操作相同

您唯一能做的就是序列化您的学生类型并将其作为原始WCF Message类型嵌入,并将其作为服务操作中的返回类型公开。

然后,您可以手动处理反序列化到您选择的客户端类型,具体取决于调用的服务操作。

然而,这可能是一个荒谬的用例,正如您已经建议的那样,只需创建另一种服务类型并通过其他操作公开它。