【发布时间】:2014-10-14 00:22:25
【问题描述】:
只是一个简单的问题,Win 8.1 通用类库不支持这个吗?或者如果是,任何人都可以帮助我做错什么。
http://jbsapplication.azurewebsites.net/Modules?$filter=Name%20eq%20'JBS%20Electronic%20forms'&$expand=Menus
当我从浏览器或 Fiddler 执行此操作时,我会收到正确的响应。
我在客户端视图模型类中的代码如下(使用OData Client v2代码生成的对象)
var application = new UriBuilder(ServiceBaseAddress);
var context = new Models.Application(application.Uri);
var modulesQuery = context.Modules.Expand(m=>m.Menus).Where(m => m.Name == ApplicationName);
var modules = await ((DataServiceQuery<Module>) modulesQuery).ExecuteAsync();
_currentModule = modules.FirstOrDefault();
最后一行产生如下异常
在 Microsoft.OData.Core.DLL 中发生了“Microsoft.OData.Core.ODataException”类型的第一次机会异常
附加信息:写入 JSON 响应时,必须指定用户模型,并且必须将实体集和实体类型传递给 ODataMessageWriter.CreateODataEntryWriter 方法,或者必须在正在写入的 ODataEntry 或 ODataFeed 上设置 ODataFeedAndEntrySerializationInfo。
如果我删除请求的展开部分,一切都很好,但我需要再执行一次往返以获取菜单。
Module 类的精简参考:
[Key("Id")]
public class Module: BindableBase
{
public string Name
{
get { return _name; }
set { SetProperty(ref _name, value); }
}
DataServiceCollection<Menu> _menus = new DataServiceCollection<Menu>(null,TrackingMode.AutoChangeTracking);
public DataServiceCollection<Menu> Menus
{
get { return _menus; }
set
{
_menus = value;
OnPropertyChanged("Menus");
}
}
}
【问题讨论】:
标签: c# odata win-universal-app