私はこの問題を数日間抱えていました(現在は修正されており、この問題に遭遇して髪を抜いている人のために解決策が指摘されています)。
データに MVC4 WebAPI を使用する Silverlight アプリケーションに最新のコード変更を加えた後、返された HttpGet アクションの 1 つで問題が発生しましたIQueryable<oneofmyclasses>
。Fiddler2 を使用してリクエストを監視すると、内部サーバー エラー (500) が発生していることがわかりました。理由を説明する本文はありません。アクションでエラーがスローされませんでした。
チェック 1:アクションが実際にreturn collection.AsQueryable();
エラーなしで行に到達していることを確認しました。そうだった
チェック 2:このコードを使用して、データがエラーなしで JSON にシリアル化されていることを確認しました (g は私のコレクションです)。
var json = new JsonMediaTypeFormatter();
json.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
ObjectContent<IEnumerable<Model.MenuGroup>> responseContent = new ObjectContent<IEnumerable<Model.MenuGroup>>(g, json);
MemoryStream ms = new MemoryStream();
responseContent.CopyToAsync(ms).Wait();
ms.Position = 0;
var sr = new StreamReader(ms);
var str = sr.ReadToEnd();
これも機能しました。また、XML フォーマッターを使用してテストしましたが、これまで JSON しか使用していなかったと確信していました (あまり注意する必要はありません)。
チェック 3: .Net Framework のデバッグを有効にしました。今回(HttpApplication.csで)エラーが発生したとき、VS 2012はそれをキャッチしました。
私のエラー:
これらの属性でプロパティをマークしたにもかかわらず、
[XmlIgnore]
[IgnoreDataMember]
[JsonIgnore]
.Net ソースが私のプロパティの 1 つで get を呼び出していました。問題は、それが書き込み専用のプロパティだったことです。私は単に追加しました
get { return null; }
そして問題は解決しました。
おそらく最初にチェック 3 を実行する必要がありましたが、このエラーに関する以前の経験から、通常はオブジェクトをシリアル化しようとしているエラーであることがわかりました。持続しました。