Ответ 1
Да, вам не хватает атрибут [DataContract]
в производном классе. Вам также нужно добавить [DataMember]
к любым свойствам или полям, которые вы хотите сериализовать, если вы еще не добавили их. Это указано в документации для класса DataContractAttribute
, как указано ниже (акцент мой):
Примечание
Контракт данных существенно отличается от фактического интерфейса в его наследовании. Интерфейсы наследуются любыми производными типами. При применении DataContractAttribute к базовому классу производные типы не наследуют атрибут или поведение. Однако, если производный тип имеет контракт с данными, члены данных базового класса сериализуются. Однако вы должны применить DataMemberAttribute к новым членам производного класса, чтобы сделать их сериализуемыми.
Json.Net был изменен, чтобы почитать это поведение в версии 5.0 версии 1 (апрель 2013 г.).
Обратите внимание, что если вы удаляете из своих классов все экземпляры [DataContract]
и [DataMemeber]
, Json.Net ведет себя по-другому: в этом случае поведение по умолчанию для Json.Net заключается в сериализации всех общедоступных свойств, как в базе и производные классы.