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

本文关键字:LINQ 返回 JSON 结果 WCF | 更新日期: 2023-09-27 18:22:39

我是WCF的新手。我正在尝试使用实体框架创建具有LINQ结果的列表。我想返回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;
}

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

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

根据讨论,派生对象可能导致localhost.com问题,可能存在无效的proeprty值。您还可以利用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();
}