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: Type 'System.Data.Entity.DynamicProxies.UserAppVersion_FD8D86F0A3AE39A0C370918637C1A90AD8D3ACA3E149677EA82C0A8D10ED0F8D' with data contract name 'UserAppVersion_FD8D86F0A3AE39A0C370918637C1A90AD8D3ACA3E149677EA82C0A8D10ED0F8D:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' is期待できません。DataContractResolver の使用を検討するか、既知の型のリストに静的に認識されていない型を追加します。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加します。

残念ながら、これを解決する方法がわかりません。助言がありますか?

4

1 に答える 1

3

これはデータ契約の問題であり、オープンラストの問題ではありません。

DataContractシリアジエは、おそらく最初にEFコードによって生成された動的プロキシを確認しています。これを確認すると、オブジェクトをレンダリングできません。

別のシリアル化コーデックと交換するか、透過的な遅延読み込みを無効にするか、またはプロパティをシリアル化の無視としてマークし、別のプロパティをリストに入力して、シリアライザーが機能できるようにすることをお勧めします。

WCF4.0でEntityFramework4.0を使用した場合のDataContractSerializerエラーを参照してください

于 2011-06-06T12:58:09.623 に答える