JSON Самостоятельная ссылка на цикл - PullRequest
0 голосов
/ 13 июля 2010

Я делаю некоторую работу с C #, AJAX и JSON, и получаю ошибку цикла Self-referenceingcing. Мне удается обойти это, используя атрибут JsonIgnore, но мне было интересно, может ли кто-нибудь дать мне правильное объяснение того, что на самом деле здесь происходит.

Большое спасибо.

Дейв

1 Ответ

5 голосов
/ 13 июля 2010

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

Скажем, у вас есть переменная типа User со свойством public UserImage Image. Теперь, скажем, тип UserImage имеет свойство User, которое ссылается на пользователя.

В вашем .NET-коде это просто так. myImage.User дает вам пользователя, myUser.Image дает вам изображение. Но представьте, что вы хотите сериализовать myUser (скажем, в JSON). Затем вы должны циклически перебрать все свойства User и сериализовать , которые , рекурсивно. Сериализатор запускается так:

{ "ID": 1, "Image": { ...

теперь он должен сериализовать образ пользователя. И помните, UserImage имеет переменную «Пользователь».

{ "ID": 1, "Image": { "Path": "image.src", "User": {

но пользователь - это тот же пользователь, на которого мы пытаемся ссылаться

{ "ID": 1, "Image": { "Path": "image.src", "User": { "ID": 1, "Image":

теперь мы должны сериализовать образ для этого пользователя, но это, опять же, то же изображение, что и раньше:

{ "ID": 1, "Image": { "Path": "image.src", "User": { "ID": 1, "Image": { "Path": "image.src", "User": { "ID": 1, "Image": { "Path": "image.src", "User": { "ID": 1, "Image": { "Path": "image.src", "User": 

поэтому мы никогда не достигнем конечного продукта, если постоянно сериализуем циклическую ссылку.

...