虚拟属性是否需要 [DataMember] 属性?

Is the [DataMember] attribute needed on virtual properties?

虚拟属性是否需要 [DataMember] 属性?

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

[DataMember]
public virtual ApplicationUser User { get; set; }

或者这是正确的方法:

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

public virtual ApplicationUser User { get; set; }

这与属性是否为虚拟无关。如果你想要一个 属性 被序列化(即对 WCF 客户端可见),你将它标记为 DataMember.

请记住,如果你这样做,ApplicationUser 也应该是 DataContract,否则你会得到像

这样的异常

Type 'ApplicationUser' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. ...