Ответ 1
Лучший подход - вы должны использовать DTO для передачи только данных, которые вы хотите клиенту. DTO должны иметь только простые свойства, поэтому он не будет создавать круговую опорную ошибку. В настоящий момент Лес имеет List<Trees> Trees
, и каждый Tree
внутри Деревья имеет Forest
и что Forest
снова имеет List<Trees>
Или
Вы можете украсить свои атрибуты с помощью ScriptIgnore
для свойств, которые вы не хотите
Json.Encode для сериализации, а затем это не будет отправлено обратно клиенту.
http://msdn.microsoft.com/en-us/library/system.web.script.serialization.scriptignoreattribute.aspx
Например:
public class Forest
{
public Guid ID { get; set; }
public virtual List<Tree> Trees { get; set; }
}
public class Tree
{
public Guid ID { get; set; }
public Guid? ForestId {get;set;}
[ForeignKey("ForestId")]
[ScriptIgnore]
public virtual Forest Forest {get;set;}
}
Edit:
Наряду с ScriptIgnore
вы также должны удалить virtual
из Forest
и Trees
, и это сработает. Я протестировал его. Тем не менее, я бы не советовал, потому что виртуальное ключевое слово - это то, что делает Lazy. Следовательно, как я уже сказал, вам нужно создать DTO на основе этих моделей и отправлять только DTO клиенту.