Возврат сущности WCF EF4 в формате JSON - PullRequest
2 голосов
/ 11 июля 2011

Мой сервисный интерфейс:

[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 pepe in JSON», это нормально.

Когда я вызываю второй метод и устанавливаю точку останова в строке «return emp;» Я получаю список сотрудников (в базе данных 6 записей), но в IE я получаю это:

Internet Explorer не может отобразить веб-страницу

и тестирование в Firefox все, что я получаю, это пустая страница с пустым телом, без HTML, без данных и без ошибок.

Я думаю, что WCF не может сериализовать мои объекты EF4 по умолчанию.

EDIT:

Мое окончательное решение было что-то (не совсем), как это:

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

Ответы [ 2 ]

1 голос
/ 11 июля 2011

EF-сущности не могут быть сериализованы по умолчанию, вы должны добавить к ним генерацию кода.

См. Эту статью о том, как создавать сериализуемые сущности.

называется Самопроверкаемые сущности

0 голосов
/ 11 июля 2011

Лучшим способом было бы включить службы RIA и предоставить конечную точку JSON, она все делает правильно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...