开发者

Return a WCF EF4 Entity as JSON

开发者 https://www.devze.com 2023-03-19 04:43 出处:网络
My service interface is: [ServiceContract] public interface IMyService { [OperationContract] [WebInvoke(Method = \"GET\", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,

My service interface is:

[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();
}

My implementation is:

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

When I call the first method I get开发者_如何学JAVA something like "Hello pepe in JSON", that's ok.

When I call the second method and set a breakpoint on line "return emp;" I get the list of the employees(there are 6 records from the database), but in IE I get this:

Internet Explorer cannot display the webpage

and testing in Firefox all I get is a blank page with a blank body, no HTML, no data and no errors.

I think WCF can't serialize my default EF4 entities.

EDIT:

My final solution was something(not exactly) like this:

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


EF entities cannot be serialized by default you must add code generation to them.

Refer to this article on how to create Serializable entities.

called Self Tracking entities


The best way would be to enable RIA Services and expose JSON Endpoint, it does everything correctly.

http://blogs.msdn.com/b/davrous/archive/2010/12/14/how-to-open-a-wcf-ria-services-application-to-other-type-of-clients-the-json-endpoint-4-5.aspx

http://channel9.msdn.com/Shows/SilverlightTV/Silverlight-TV-26-Exposing-SOAP-OData-and-JSON-Endpoints-for-RIA-Services

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号