【问题标题】:Conditional WCF DataContract Serialization条件 WCF DataContract 序列化
【发布时间】:2015-06-05 13:30:44
【问题描述】:

在使用 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);

我正在从wcfStudent 复杂类型的形式返回一个响应,其方法名称为GetStudent(),它工作正常。但在另一个场景中,我还有一个名为 GetStudentDetail() 的网络方法,我想在其中从 Student 类返回更多数据成员,例如:

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

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

如果我在Student 类中添加新的Datamember,它会自动显示我不想要的GetStudent() 方法的架构。实际上我不想将架构中的新字段返回给@987654330 @ 方法。所以问题就在这里:我只想为GetStudentDetail() 方法公开Student 类的新数据成员。

我怎样才能做到这一点?

【问题讨论】:

  • 引入DetailedStudent类并从Student继承呢?
  • 不,我不想上DetailedStudent课;只是希望为具有不同数据成员的两种 Web 方法只返回学生类。有什么逻辑吗?
  • 这应该如何在客户端表示?作为两个不同的班级?
  • 它不会自动显示。您的两种方法都返回相同的 student 类型。除非您想创建两种不同的类型,否则您会问一些不可能的事情。
  • 嘿,伙计们,不要说不可能,至少在 IT 方面:) ..它们是方法..我正在尝试..希望如果您理解这个问题可以提供帮助。

标签: wcf xml-serialization datacontract


【解决方案1】:

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

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

然后您可以根据调用的服务操作手动处理到您选择的客户端类型的反序列化。

然而,这将是一个荒谬的用例,因为您可以像已经建议的那样简单地创建另一个服务类型并将其公开给另一个操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2011-06-28
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多