如何在WCF中使用LINQ返回JSON结果?

时间:2014-09-18 08:59:08

标签: c# linq entity-framework wcf

我是WCF的新手。我正在尝试使用Entity Framework创建具有LINQ结果的List。我想返回JSON数据。但我无法得到它。我收到错误,如Notsupportedexception未被用户代码处理。请帮我解决这个问题。提前谢谢。

这是我的服务构造函数:

[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "getcontact")]
List<string> JSONDataAll();

如果我像这样返回它的工作正常:

public List<String> JSONDataAll()
{   
var users = (from u in db.Tbl_Users select u).ToList();
var finalList= users.Select(u => u.UserName).ToList();
return st;
}

在这种情况下显示错误:

public List<String> JSONDataAll()
{
var users = (from u in db.Tbl_Users
select new
{ u.UserName,
u.UserAddress
}).ToList();
return users;
}

1 个答案:

答案 0 :(得分:0)

由于您正在使用WCF,要进行投影(select子句),您可以创建一个新类型作为返回类型而不是匿名对象或派生对象,并且EF实体不能用于进行投影。

派生对象可能会在讨论中导致localhost.com问题,可能存在无效的proeprty值。您还可以benefits使用DataMember属性进行配置。

[DataContract]
public class UserDataResponse
{
    [DataMember]
    public string UserName { get; set; }
    [DataMember]
    public string UserAddress { get; set; }
}

并更改WCF操作的返回类型。

public List<UserDataResponse> JSONDataAll()
{
    var users = (from u in db.Tbl_Users
                select new UserDataResponse
                {
                    UserName = u.UserName,
                    UserAddress = u.UserAddress
                });
    return users.ToList();
}