Циркулярные ссылки и ScriptIgnore проблемы - PullRequest
4 голосов
/ 13 февраля 2012

У меня есть несколько классов BusinessObject, которые ссылаются друг на друга, и мне нужно сериализовать один класс в JsonResponse и вернуть его на мой взгляд. Я продолжаю получать исключение по циклической ссылке и не могу от него избавиться. Я поместил декоратор [ScriptIgnore()] на каждое свойство, которое не является свойством простого типа данных, и я все еще получаю исключение. Я не могу понять, где проблема, потому что я блокирую сериализатор практически от всего, и он все еще взрывается на мне.

Есть ли способ узнать текущее состояние сериализованного объекта?

    [HttpPost]
    public JsonResult GetAnalysisInfo(int id)
    {
        ProjectContext myDB = db;
        SearchAnalysis searchanalysis = SearchAnalysis.Find(myDB, id);
        //searchanalysis.Results = searchanalysis.SearchResultsPrototype(myDB);
        return this.Json(searchanalysis);
    }

Обновление

Я также пытался реализовать ISerializable безрезультатно. Мой GetObjectData очень прост:

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("SearchAnalysisId", this.SearchAnalysisId);
        info.AddValue("Created", this.Created);
    }

По-прежнему появляется ошибка CircularRefernce. Типы данных DateTime не вызывают проблем с сериализацией, верно?

1 Ответ

1 голос
/ 13 февраля 2012

Что я делаю, чтобы предотвратить эту ошибку, так это возвращаю анонимный тип, который отражает свойства моего объекта, например:

    public JsonResult CompanyListJson()
    {
        var list = (from companies in appContext.Companies
                    where companies.Active.Equals(true)
                    select new
                    {
                        Name = companies.DbName,
                        Id = companies.Id,
                        Active = companies.Id.Equals(CurrentCompany.Id)

                    });
        return Json(list, JsonRequestBehavior.AllowGet);
    }

Возможно, это не самый лучший способ, но он позволяет мне сохранять JSON тонким и выдвигать только те данные, которые мне нужны (и, конечно, избегать исключения из циклических ссылок)

Глядя на ваш пример, я бы выбрал новый тип анонимной в SearchAnalysis, взяв нужные мне свойства. Это должно работать

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