是否可以使用OpenRasta在json中返回嵌套类?
我首先使用EF4.1代码(理论上它不应该有所作为,因为它们只是POCO类)。
以下是一个例子:
public class AppUser
{
[Key]
public int AppUserId { get; set; }
public string WinLogin { get; set; }
public string ScreenName { get; set; }
public string AgencyId { get; set; }
public virtual ICollection<UserAppVersion> UserAppVersion { get; set; }
}
public class UserAppVersion
{
[Key]
public int UaVersionId { get; set; }
public int AppUserId { get; set; }
public int AppVersionId { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateUpdated { get; set; }
public virtual AppUser User { get; set; }
public virtual AppVersion Version { get; set; }
}
我尝试使用以下命令在json中返回 AppUser 记录:
ResourceSpace.Has.ResourcesOfType<AppUser>()
.AtUri("/user").HandledBy<UserHandler>().AsJsonDataContract();
但是我收到了一个错误:
System.Runtime.Serialization.SerializationException:类型 'System.Data.Entity.DynamicProxies.UserAppVersion_FD8D86F0A3AE39A0C370918637C1A90AD8D3ACA3E149677EA82C0A8D10ED0F8D' 与数据合同名“UserAppVersion_FD8D86F0A3AE39A0C370918637C1A90AD8D3ACA3E149677EA82C0A8D10ED0F8D:HTTP://schemas.datacontract.org/2004/07/System.Data.Entity。 DynamicProxies'不是预期的。考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。
不幸的是我不知道如何解决这个问题。有什么建议吗?
答案 0 :(得分:3)
这是数据合同问题,而非公开问题。
DataContract serialzier看到的动态代理可能是由EF代码首先生成的,当看到它无法呈现对象时。
我建议交换另一个串行编解码器,或禁用透明延迟加载,或者将您的属性标记为对序列化的忽略,并将另一个属性键入List,以便序列化程序可以正常运行。
请参阅DataContractSerializer Error using Entity Framework 4.0 with WCF 4.0