Вы можете использовать DataContractSerializer (который используется WCF) и украшать каждый класс (Family и School) атрибутом DataContract и свойством IsReference, установленным в true, например:
[DataContract(IsReference=true)]
public class Family
{
// ...
}
Это скажет DataContractSerializer, чтобы сохранить ссылки нетронутыми при воссоздании графа объекта при десериализации.
Вы можете сериализовать объект 'objectInstance' в поток с помощью DataContractSerializer следующим образом:
using (var stream = new MemoryStream())
{
var serializer = new DataContractSerializer(objectInstance.GetType());
serializer.WriteObject(stream, objectInstance);
// The object has now been serialized to the stream
// Do something with the stream here.
}
Обратите внимание, что на самом деле вам не нужно использовать WCF, вы можете просто использовать DataContractSerializer длясериализовать / десериализовать граф объектов.
Подробнее об этом атрибуте можно узнать на MSDN здесь .
Кроме того, вот базовый пример изкак использовать свойство IsReference.