2011-06-06 126 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