WCF 数据服务,序列化实体框架部分类的附加属性
Posted
技术标签:
【中文标题】WCF 数据服务,序列化实体框架部分类的附加属性【英文标题】:WCF Data Service, serialize additional properties from Entity Framework partial classes 【发布时间】:2011-04-11 04:01:00 【问题描述】:我正在以与Hanselman showed it could be done for *** 大致相同的方式创建 API。我有一堆EntityObject
Entity Framework 生成的类和一个DataService
将它们序列化为 Atom 和 JSON 的东西。我想通过 Web 服务公开一些生成的属性。将 FullName 视为通过连接 First- 和 LastName 生成的(但有些更复杂)。我已将这些添加到扩展实体框架 EntityObject 的部分类中,并为它们提供了 [DataMember]
属性,但它们并未出现在服务中。这是一个示例属性(set
被投入使用,没有它也不起作用):
[DataMember]
public string FullName
get
return (this.FirstName ?? "") + " " + (this.LastName ?? "");
set
根据 MSDN 论坛上的 these discussions,这是一个已知问题。有没有人找到好的解决方法或者有没有人有替代方案的建议?
【问题讨论】:
不是答案,但作为风格问题,当您使用属性时,您不需要说Attribute
。 [DataMember]
就是你所需要的。
【参考方案1】:
我在通过 WCF 服务公开 Entity 对象时遇到了同样的问题,并使用了您链接到 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 服务接口引用此类,那么额外的属性就会被序列化并可供服务的使用者使用。
例如
[OperationContract]
List<Teacher> GetTeachers();
【讨论】:
嗯,但似乎没有工作。您要对哪些实体进行序列化? 我在上面的答案中添加了一个更详细的示例。 我认为这需要 EF4 才能工作。 @Nelson - 你能确认你有 .NET 框架 4.0 吗? 此答案特定于 WCF 服务,而不是 WCF 数据服务。以上是关于WCF 数据服务,序列化实体框架部分类的附加属性的主要内容,如果未能解决你的问题,请参考以下文章
如何处理循环引用 - 或 - 在 WCF 服务中返回的第一级子项下的引用暴露实体框架数据模型?