Сериализация объектов Entity Framework в JSON

asp.net-ajax entity-framework json wcf

Вопрос

Похоже, что сериализация объектов Entity Framework в JSON невозможна с использованием собственного DataContractJsonSerializer WCF или собственного сериализатора JavaScript ASP.NET. Это связано с проблемами подсчета ссылок, которые отвергают оба сериализатора. Я также пробовал Json.NET , которая также не работает конкретно по проблеме подсчета ссылок.


Редактировать: Json.NET теперь может сериализовать и десериализовать сущности Entity Framework .


Мои объекты являются объектами Entity Framework, которые перегружены для выполнения дополнительных бизнес-функций (например, аутентификации и т. Д.), И я не хочу украшать эти классы атрибутами, специфичными для платформы, и т. Д., Так как я хочу представить независимый от платформы API ,

Я на самом деле написал в блоге об отдельных шагах, которые я сделал, хотя на https://blog.programx.co.uk/2009/03/18/wcf-json-serialization-woes-and-a-solution/

Я что-то упустил очевидное?

Принятый ответ

Я делаю это, проецируя данные, которые я хочу сериализовать, в анонимный тип и сериализуя их. Это гарантирует, что сериализуется только та информация, которую я на самом деле хочу получить в JSON, и я не могу случайно сериализовать что-то еще вниз по графу объектов. Это выглядит так:

var records = from entity in context.Entities
              select new 
              {
                  Prop1 = entity.Prop1,
                  Prop2 = entity.Prop2,
                  ChildProp = entity.Child.Prop
              }
return Json(records);

Я нахожу анонимные типы почти идеальными для этого. JSON, очевидно, не волнует, какой тип использовался для его создания. А анонимные типы дают вам полную гибкость в отношении того, какие свойства и структуру вы помещаете в JSON.


Популярные ответы

Microsoft допустила ошибку в том, что они превратили объекты EF в контракты данных. Они включали базовые классы и обратные ссылки.

Лучше всего будет создать эквивалентные классы объектов передачи данных для каждой сущности, которую вы хотите вернуть. Они будут включать только данные, а не поведение и не специфичные для EF части объекта. Вы также создадите методы для перевода в и из ваших классов DTO.

Затем ваши службы вернут объекты передачи данных.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему