У меня есть объект, Course
. Курс имеет, как свойство, список других курсов, которые являются предпосылками:Управление ссылками после десериализации
public class Course
{
public List<Course> Prereqs { get; set; }
...
}
создать список курсов в моем приложении, и я сериализовать его. Список позже загружается и десериализуется.
Предположим, у меня есть два курса: Исчисление 1 и Исчисление 2. Исчисление 1 не имеет предварительных условий, а Исчисление 2 имеет Исчисление 1 в качестве предпосылки. Мое приложение создает список под названием Curriculum
: List<Course> Curriculum = JsonConvert.Deserialize<List<Course>>(serializedList);
Теперь предположим, что я хочу изменить название Исчисление 1 из «Исчисление 1» на «одной переменной Исчисление», (который, давайте представим, первый элемент в список):
Course Math101 = Curriculum[0];
Math101.CourseName = "Single Variable Calculus";
Однако, если я: Curriculum[1].Prerequisites[0].CourseName; \\ spit out the CourseName for Math101, as recorded as a pre-req for Math102
тогда я получаю "исчисление 1".
Это связано с тем, что, когда Curriculum
сериализуется, он сериализует Curriculum[0]
(Calc 1) и Curriculum[1].Prerequisite[0]
(также Calc 1) отдельно.
Мой вопрос Есть ли простой способ управления сериализацией того, что должно быть ссылочными типами с использованием C# и JSON?
Я думаю, что часть вашей проблемы - это путаница между курсами (которые имеют prereqs) и «зачислениями», которые имеют оценки. Зачислением будет запись студента, зачисленного на курс в течение срока. У него были бы атрибуты, такие как посещаемость, оценки, возможно, результаты тестов и т. Д. –
@JohnSaunders Честно говоря, это не мое замешательство. Это приведенный пример, который изоморфен гораздо большей проблеме, учитывая контекст, который должен быть широко знакомым. – Emily
Итак, вы спрашиваете, как сохранить идентификатор объекта? Кроме того, есть ли у вас какие-либо потенциальные проблемы с круговыми или множественными ссылками? –