Я отвечаю на это, несмотря на его возраст, потому что это 3-й результат (в настоящее время) от Google для "циклической ссылки json.encode", и хотя я не согласен с ответами (полностью) выше, в котором используется ScriptIgnoreAttribute предполагает, что вы нигде в своем коде не захотите пройти через отношения в другом направлении для некоторого JSON. Я не верю в блокировку вашей модели из-за одного варианта использования.
Это вдохновило меня на использование этого простого решения.
Поскольку вы работаете в View в MVC, у вас есть Модель, и вы хотите просто назначить Модель для ViewData.Model в вашем контроллере, продолжайте и используйте запрос LINQ в вашем View, чтобы корректно сгладить данные удаляя неправильную циклическую ссылку для конкретного JSON, который вы хотите, вот так:
var jsonMachines = from m in machineForm
select new { m.X, m.Y, // other Machine properties you desire
Customer = new { m.Customer.Id, m.Customer.Name, // other Customer properties you desire
}};
return Json(jsonMachines);
Или, если отношение "Машина -> Клиент" равно 1 .. * -> *, попробуйте:
var jsonMachines = from m in machineForm
select new { m.X, m.Y, // other machine properties you desire
Customers = new List<Customer>(
(from c in m.Customers
select new Customer()
{
Id = c.Id,
Name = c.Name,
// Other Customer properties you desire
}).Cast<Customer>())
};
return Json(jsonMachines);