1

是否可以使用 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 的已知类型列表中。

不幸的是,我不知道如何解决这个问题。有什么建议么?

4

1 回答 1

3

这是一个数据合同问题,而不是一个开放式的问题。

DataContract serialzier 看到一个可能由 EF 代码首先生成的动态代理,并且在看到它时无法呈现对象。

我建议更换另一个序列化编解码器,或禁用透明延迟加载,或者将您的属性标记为序列化的忽略,并将另一个属性键入到 List 以便序列化程序可以运行。

请参阅DataContractSerializer Error using Entity Framework 4.0 with WCF 4.0

于 2011-06-06T12:58:09.623 回答