【发布时间】:2015-11-18 19:35:31
【问题描述】:
我已经有这个问题好几天了(现在已解决,并且为遇到此问题并正在拔头发的任何人提供解决方案)。
在我对使用 MVC4 WebAPI 获取数据的 Silverlight 应用程序进行最新一轮代码更改后,我的一个 HttpGet 操作出现问题,它返回 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 源正在调用我的一个属性。问题是,它是一个只写属性。我只是添加了
get { return null; }
问题就解决了。
我可能应该先完成检查 3,但我之前遇到此错误的经验表明,尝试序列化我的对象通常是一个错误,这就是为什么当它们正确序列化时我有点头疼并且错误仍然存在。
【问题讨论】:
-
很高兴你能弄明白。您应该写下解决它的支票作为答案。 :)
标签: asp.net-web-api