WCF数据服务,从Entity Framework部分类序列化其他属性

时间:2010-09-11 18:38:59

标签: c# wcf entity-framework wcf-data-services

我正在以与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,这是一个已知问题。有没有人找到好的解决方法,或者有没有人有替代方案的建议?

1 个答案:

答案 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();