2012-03-12 12 views
6

新しいMVC 4ベータ版でWebAPIを使用しています。私はvirtual ICollection<>プロパティを持つエンティティを取得しようとしたときにこのエラーに遭遇しました。今のところこれを回避する方法はありますか?これがベータ段階にあることを理解しているので、これは道路に固定されている可能性があります。このためにそこに解決策があるのであれば、それは好奇心に過ぎませんでした。MVC 4ベータ - ローカル名 '__type'を持つ属性を記述した後、 'type' = 'object'属性を記述する必要があります

答えて

2

仮想キーワードを削除し、仮想キーワードを持つオブジェクトやコレクションがMyリポジトリ内のIncludeステートメントに含まれていることを確認することで、これが機能するようになりました。

public class Order 
{ 
    public int ID { get; set; } 
    public DateTime OrderDate { get; set; } 
    public ICollection<Product> Products { get; set; } 
} 

public interface IOrderRepository 
{ 
    IQueryable<Order> Orders { get; } 
    void SaveOrder(Order order); 
    void DeleteOrder(Order order); 
} 

public class OrderRepository 
{ 
    StoreDbContext db = new StoreDbContext(); 

    public IQueryable<Order> Orders 
    { 
     get { return db.Orders.Include("Products"); } 
    } 

    public void SaveOrder(Order order) 
    { 
     db.Entry(order).State = order.ID == 0 ? 
       EntityState.Added : 
       EntityState.Modified; 

     db.SaveChanges(); 
    } 

    public void DeleteOrder(Order order) 
    { 
     db.Orders.Remove(order); 

     db.SaveChanges(); 
    } 
} 
+0

自動生成されたプロキシをシリアル化することに関連したエラーがあり、実際にそれらを必要としない場合は、コンテキスト上でプロキシ作成を無効にする必要があるかもしれません...同様のQ/A ... http ://stackoverflow.com/questions/8173524/webapi-with-ef-code-first-generates-error-when-having-parent-child-relation – blins

+0

これはおそらくもっと効率的な別の解決策です。http://stackoverflow.com/questions/7235650/entity-framework-serialize-poco-to-json – starcorn

0

私にも同様の問題がありました。単純な型しか持たないViewModelクラスのようなものを使って修正しました。 DbContextから返されたオブジェクトをViewModelクラスに変換し、それをクライアントに渡しました。

これはすべての状況で機能するわけではありませんが、それは私の場合でした。

1

同じ問題がありましたが、デフォルトのWebApiシリアライザに問題があるようです。 私はGlobal.asax.csにJson.Netをフォーマッタとして追加しました。 http://blogs.msdn.com/b/henrikn/archive/2012/02/18/using-json-net-with-asp-net-web-api.aspx

これは私がちょうどNuGet使用Json.Netパッケージを追加

JsonSerializerSettings serializerSettings = new JsonSerializerSettings(); 
serializerSettings.Converters.Add(new IsoDateTimeConverter()); 
GlobalConfiguration.Configuration.Formatters[0] = new JsonNetFormatter(serializerSettings); 

私は私のGlobal.asax.csに持​​っているものであり、以下のようにJsonNetFormatterクラスを作成しました: は、私はこの例に従っ上記の記事で説明しました。

0

も、この問題に遭遇しました。私の状況は少し違いました。

私はこの構造を持っていて、それは私にとってはうまくいかないでしょう。

[DataContract] 
public class MJPEGCamera : Camera 
{ 
} 
[DataContract] 
public class H264Camera : Camera 
{  
} 
[DataContract] 
public class Camera 
{ 
    [DataMember] 
    public string cameraName { get; set; } 
    [DataMember] 
    public string address { get; set; } 
    [DataMember] 
    public string format { get; set; } 
    [DataMember] 
    public string archiveDaysUrl { get; private set; } 
    [DataMember] 
    public string archiveHoursUrl { get; private set; } 
} 

私は、必要なものを達成するためにカメラに工場を作成しました。これがこの答えを見つける誰かを助けることを願っています。

関連する問題