Это ошибка? ... есть причина за круговой ссылкой ... как решить, но? - PullRequest
0 голосов
/ 03 февраля 2011

У меня есть приложение asp.net mvc, где моя модель имеет отношение типа «Вопрос может иметь несколько ответов». Таким образом, при создании файла .dbml и классов вопросный класс будет содержать право EntitySet? но каждый объект в EntitySet (означает объект ответа) будет иметь свойство как «вопрос», поэтому инфраструктура автоматически создает там циклическую ссылку и зависимости. что действительно фокусируется, когда мы собираемся сериализовать список вопросов (List) для генерации вывода json для конкретного действия в контроллере. Если мы используем атрибут [ScriptIgnore] для свойства как «Ответы» в классе «Вопрос» в файле designer.cs (генерируется фреймворком, обычно люди избегают его беспокоить и меня тоже), то все работает нормально.

Можем ли мы решить эту проблему с помощью частичных классов? но я думаю, что частичные свойства не существуют в C #.

У меня вопрос, это БАГ? или какое-то средство, чтобы решить это? мои отношения: enter image description here

И ошибка:

A circular reference was detected while serializing an object of type 'myApp.Models.Question'.

Ответы [ 3 ]

2 голосов
/ 07 февраля 2011

Это функция, которую вы используете неправильно.

Вы никогда не должны сериализовать классы LINQ to SQL (или Entity Framework). Несмотря на то, что Microsoft поместила [DataContract] и другие атрибуты в эти классы, они не должны сериализоваться.

Вместо этого спроектируйте набор классов, который правильно соответствует сериализации, которую вы хотите. Например:

public class Question
{
    public int ID {get;set;}
    public string Text {get;set;}
    public List<Answer> Answers {get;set;}
}

public class Answer
{
    public string Text {get;set;}
}

Заполните экземпляры этих классов из ваших классов базы данных и вместо этого сериализуйте эти классы передачи данных.

Кстати, это шаблон объекта передачи данных.

1 голос
/ 17 марта 2011

Пометьте ваши классы с помощью [DataContract (IsReference = true)], чтобы разрешить сериализацию циклических ссылок

0 голосов
/ 03 февраля 2011

Это особенность:)

Корень проблемы в том, что JSON не поддерживает циклические ссылки (хотя Entity Framework поддерживает).

Поэтому при передаче данных клиенту вJSON, вам нужно выбрать иерархию, которую вы хотите использовать.

Ваше решение с помощью [ScriptIgnore], вероятно, является лучшим способом ее решения.Наверное, лучше всего разместить его в «Вопросах» в ответе.

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