我正在以与Hanselman showed it could be done for Stackoverflow大致相同的方式创建API。我有一堆EntityObject
实体框架生成的类和一个DataService
的东西,可以将它们序列化为Atom和JSON。我想通过Web服务公开一些生成的属性。将FullName视为通过连接First-和LastName生成的(但有些更复杂)。我已将这些添加到扩展Entity Framework EntityObject的部分类中,并为它们提供[DataMember]
属性,但它们不会显示在服务中。这是一个示例属性(set
被引入以获得良好的衡量标准,如果没有它也无法运行):
[DataMember]
public string FullName
{
get
{
return (this.FirstName ?? "") + " " + (this.LastName ?? "");
}
set { }
}
根据MSDN论坛上的these discussions,这是一个已知问题。有没有人找到好的解决方法,或者有没有人有替代方案的建议?
答案 0 :(得分:0)
我在通过WCF服务公开实体对象时遇到了同样的问题,并使用了链接到here的变通方法,即将属性添加到属性以强制它们被序列化。
[global::System.Runtime.Serialization.DataMemberAttribute()]
我还没有找到任何“更好”的方法来实现这一目标。
例如,给定一个名为Teacher的实体,其字段为Title,Forenames和Surname,您可以为教师添加以下类似的部分类:
public partial class Teacher
{
[global::System.Runtime.Serialization.DataMemberAttribute()]
public string FullName
{
get { return string.Format("{0} {1} {2}", Title, Forenames, Surname); }
set { }
}
}
然后,只要您的WCF服务接口引用此类,那么额外的属性将被序列化并可供服务的使用者使用。
e.g。
[OperationContract]
List<Teacher> GetTeachers();