我已经有这个问题好几天了(现在已经解决了,任何遇到这个问题并且正在拔头发的人都注意到了解决方案)。
在我对使用 MVC4 WebAPI 获取数据的 Silverlight 应用程序进行最新一轮代码更改后,我的一个 HttpGet Actions 出现问题,它正在返回IQueryable<oneofmyclasses>
. 使用 Fiddler2 观察请求,我可以看到我收到了内部服务器错误 (500),没有正文来解释原因。我的操作中没有收到任何错误。
检查 1:我确认我的 Action 确实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 Source 正在调用我的一个属性。问题是,它是一个只写属性。我只是添加了
get { return null; }
问题就解决了。
我可能应该先完成检查 3,但我之前对这个错误的经验表明,它通常是尝试序列化我的对象的错误,这就是为什么当它们正确序列化时我有点头疼并且错误坚持。