2011-06-06 108 views
1

是否有可能使用OpenRasta返回json中的嵌套类?OpenRasta Json返回嵌套类

我使用的代码第一(这在理论上不应该有所作为,因为它们只是POCO类)EF4.1。

下面是一个例子:

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'w ith数据协定名称'UserAppVersion_FD8D86F0A3AE39A0C370918637C1A90AD8D3ACA3E149677EA82C0A8D10ED0F8D:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies'不是预期的。考虑使用DataContractResolver或将任何不知道的类型静态添加到已知类型的列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型的列表中。

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

回答

3

这是一个数据合同问题,而不是一个openrast问题。

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

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

DataContractSerializer Error using Entity Framework 4.0 with WCF 4.0

+0

感谢@serialseb,我不认为它实际上是OpenRasta,会考虑它。 – 2011-06-06 13:19:28