将WCF EF4实体作为JSON返回

时间:2011-07-11 15:08:03

标签: wcf json entity-framework-4

我的服务界面是:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "HelloJSON/{name}")]
    string HelloJSON(string name);

    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "GetEmployees")]
    List<Employee> GetEmployees();
}

我的实施是:

public class MyService : IMyService
{
    public string HelloJSON(string name)
    {
        return string.Format("Hello {0} in JSON", name);
    }

    public List<Employee> GetEmployees()
    {
        using (DBEntities ctx = new DBEntities())
        {
            List<Employee> emp = new List<Employee>();
            emp = (from e in ctx.Employee select e).ToList();
            return emp;
        }
    }
}

当我调用第一种方法时,我得到类似“Hello in Pepe in JSON”的内容,没关系。

当我调用第二种方法并在行“return emp”上设置断点时我得到了员工的清单(数据库中有6条记录),但在IE中我得到了这个:

Internet Explorer无法显示网页

在Firefox中进行测试我得到的是一个空白页面,空白,没有HTML,没有数据,没有错误。

我认为WCF无法序列化我的默认EF4实体。

编辑:

我的最终解决方案是(不完全)这样的东西:

static string SerializeJSON<T>(T obj) {
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    return serializer.Serialize(obj); }

2 个答案:

答案 0 :(得分:1)

默认情况下,无法对EF实体进行序列化,必须向其添加代码生成。

请参阅本文,了解如何创建可序列化实体。

名为Self Tracking entities

答案 1 :(得分:0)