我正在尝试从我的wcf服务返回一个自定义类。我的代码在下面并且收到错误。
服务器在处理请求时遇到错误。异常消息是'DealerModel'类型的属性'UserList'不是有效属性。不支持其类型是基元或复杂类型集合的属性。请参阅服务器日志以获取更多详异常堆栈跟踪是:
我想获得如下的json值;
<Dealer>
<DealerName/>
<DealerAdress/>
<Users>
<FirstName/>
<LastName/>
<FirstName/>
<LastName/>
</Users>
</Dealer>
我的代码
using System;
using System.Linq;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
public class DataModel:IDisposable
{
private xModel.xEntities _dbContext = new xSocialModel.xEntities();
public DataModel()
{
Users = from e in _dbContext.Users
select new UserModel
{
UserID = e.UserID,
Firstname = e.Firstname,
Lastname = e.Lastname
};
Dealers = from e in _dbContext.Dealers
select new DealerModel
{
DealerID = e.DealerID,
DealerName = e.Name,
DealerAddress = e.Address,
UserList = e.Users
};
}
/// <summary>Returns the list of users.</summary>
public IQueryable<UserModel> Users { get; private set; }
public IQueryable<DealerModel> Dealers { get; private set; }
void IDisposable.Dispose()
{
_dbContext.Dispose();
}
}
using System;
using System.Data.Services.Common;
using System.Runtime.Serialization;
using System.Collections.Generic;
using System.ServiceModel;
using System.Data.Objects.DataClasses;
using System.Linq;
/// <summary>Represents a User.</summary>
[DataServiceKey("UserID")]
public class UserModel
{
public Guid UserID { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
}
[DataServiceKey("DealerID")]
public class DealerModel
{
public Guid DealerID { get; set; }
public string DealerName { get; set; }
public string DealerAddress { get; set; }
**public EntityCollection<xModel.User> UserList { get; set; }**
}
答案 0 :(得分:0)
我也遇到了很多麻烦。投影似乎不像RIA服务那样好用。我将继续并假设您正在使用实体框架。我发现这样做的唯一方法是在edmx中创建复杂类型。
要执行此操作,请打开EDMX,然后在右侧窗格中选择“模型浏览器”。在“模型”节点下,您将看到“复杂类型”,右键单击并选择“创建复杂类型”。然后,在同一窗口中,您可以命名您的类型并为其提供罐装类型的各种属性。
从您的问题看来,您有一个列表属性。我无法使用包含其他实体的属性创建这些复杂类型。不是说不可能仅仅是因为我无法弄明白。
现在在DataService中,创建一个返回类型为新复杂类型的服务方法。在服务方法中,使用投影填充对象(或列表)并像任何其他实体一样返回它。在前端,您需要像服务方法而不是实体一样调用它,否则JSON看起来与其他实体查询类似。
Sam Mueller有一个关于使用这种技术的非常好的博客,请查看:http://samuelmueller.com/2009/11/working-with-projections-and-dtos-in-wcf-data-services/