c# - WCF 数据服务,序列化 Entity Framework 部分类的附加属性

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

我正在以几乎相同的方式创建 API Hanselman showed it could be done for Stackoverflow .我有一堆 EntityObject Entity Framework 生成的类和一个 DataService 东西来将它们序列化为 Atom 和 JSON。我想通过网络服务公开一些生成的属性。将 FullName 视为通过连接 First- 和 LastName 生成的(但有些更复杂)。我已将它们添加到扩展 Entity Framework EntityObject 的部分类中,并为它们提供了 [DataMember] 属性,但它们没有出现在服务中。这是一个示例属性(set 是为了很好的衡量标准而引入的,没有它也不起作用):

[DataMember]
public string FullName
{
    get
    {
        return (this.FirstName ?? "") + " " + (this.LastName ?? "");
    }
    set { }
}

根据 these discussions在 MSDN 论坛上,这是一个已知问题。有没有人找到好的解决方法或有没有人对替代方案有建议?

最佳答案

我在通过 WCF 服务公开实体对象时遇到了同样的问题,并使用了您链接到 here 的解决方法也就是在属性中添加如下属性,强制序列化。

[global::System.Runtime.Serialization.DataMemberAttribute()] 

我还没有找到任何“更好”的方法来让它工作。

例如,给定一个名为 Teacher 的实体,其中包含 Title、Forenames 和 Surname 字段,您可以为 Teacher 添加一个部分类,例如:

public partial class Teacher
{
    [global::System.Runtime.Serialization.DataMemberAttribute()] 
    public string FullName
    {
        get { return string.Format("{0} {1} {2}", Title, Forenames, Surname); }
        set { }
    }
}

然后只要您的 WCF 服务接口(interface)引用此类,额外的属性就会被序列化并可供服务的使用者使用。

例如

[OperationContract]
List<Teacher> GetTeachers();

关于c# - WCF 数据服务,序列化 Entity Framework 部分类的附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3692167/

相关文章:

C# 处理文本文件

c# - 在 Visual Studio 2010 中调试时出现 fatal error HRESULT=0x80131c08

wcf - 带有 ssl 和 webHttpBinding 的自托管 wcf

java - WCF 客户端禁用加密

c# - 如何从 json 序列化中排除特定类型

c# - EF CodeFirst 设置默认字符串长度并使用 DataAnnotations 覆盖?

c# - Entity Framework 在多对多关系中重复条目

entity-framework - Azure Function 启动中的 EF Core 迁移

c# - 在自定义 C# 类型中实现数学函数?

java - Jackson 序列化和反序列化日期时间从/到 WCF 日期时间