Ну, ваши атрибуты повсюду - Base.Child
- это [DataMember]
, а не [DataContract]
. IIRC в телефоне 7 вам нужны публичные типы для сериализации; и это база , которая нуждается в информировании детей . Тем не мение; IBase
- другая проблема; это не обозначено как контракт. Если возможно, измените его на Base
(не IBase
), поскольку сериализатору необходимо знать обо всех конкретных контрактах.
Итак:
public interface IBase {}
[DataContract]
[KnownType(typeof(Derived))]
public class Base : IBase
{
[DataMember]
public Derived Child{get;set;}
}
[DataContract]
public class Derived : Base
{
[DataMember]
public Base Parent {get;set;}
}
Кроме того, член Parent
является большой проблемой для сериализаторов дерева (а DataContractSerializer
является сериализатором дерева, если вы явно не включите режим полного графа).
Вы могли бы иметь возможность получить DCS для отметки IBase
, но вам нужно изучить вопрос о том, чтобы пометить это как контракт и отметить конкретные типы. Если с этим ничего не получится, я знаю, что protobuf-net поддерживает эту раскладку (хотя я не тестировал этот , в частности для телефона 7, но нет фундаментальной причины, по которой он не может работать).