【问题标题】:How to return JSON result by using LINQ in WCF?如何在 WCF 中使用 LINQ 返回 JSON 结果?
【发布时间】:2014-09-18 08:59:07
【问题描述】:

我是 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;
}

【问题讨论】:

  • 我也试过那个。其显示错误,例如无法将类型 'System.Collections.Generic.List' 隐式转换为 'System.Collections.Generic.List
  • 我不建议返回匿名类型,既然你返回Tbl_Users的列表,你就可以做var result = (from u in db.Tbl_Users select u);,那你就是金子
  • @Yuliam Chandra。是的,我没有任何条件地得到它。但是如果我尝试在 LINQ 查询中给出一些条件,它会显示转换错误:(
  • 这是一个不同的问题,您的代码没有显示任何过滤条件,请更新您使用 select u 的代码和条件
  • @尤利亚姆·钱德拉。我已经更新了上面的代码。请检查一下

标签: c# linq entity-framework wcf


【解决方案1】:

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

根据讨论,派生对象可能会导致localhost.com 问题,可能存在无效的属性值。你也可以把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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多