Обработка полиморфизма с помощью DataContractSerializer

1

Как и в случае, почему json serializer не совместим с полиморфизмом? ,

У меня есть дочерний класс, наследующий от базового класса, который перезаписывает унаследованное свойство, используя новое ключевое слово.

Пример Ошибка:

Тип контракта данных "AEx" не сериализуется с помощью DataContractJsonSerializer, потому что элемент данных "Дата" дублируется в иерархии его типов.

Я знаю причину, почему это невозможно для сериализации.

Я хотел бы понять подход к решению этой проблемы, поскольку в то время я не смог реорганизовать этот фрагмент кода.

[DataContract]
class A { 
    [DataMember]
    [I'm an attribute]
    public DateTime Date {get;set;} 
}

Codebase содержит дочерний класс, который хотел бы переписать существующее унаследованное свойство, чтобы наложить на него свой собственный набор атрибутов.

[DataContract]
class AEx : A { 
    [DataMember]
    [I'm a different attribute]
    new public DateTime Date {get;set;} 
}  

Я хотел бы иметь возможность де-сериализовать этот класс свободно для json.

Теги:
polymorphism
datacontractserializer

1 ответ

1

Вы можете сделать Date в классе A виртуальным:

[DataContract]
class A 
{ 
    [DataMember]
    [SomeAttribute]
    public virtual DateTime Date {get; set;} 
}

и переопределить его в классе B:

[DataContract]
class B : A 
{ 
    [DataMember]
    [SomeOtherAttribute]
    public override DateTime Date {get; set;} 
}
  • 0
    Я не могу изменить существующие классы, этот корабль отплыл. знак равно
  • 0
    Понимаю. Я думал, вам просто не разрешено менять структуру класса. В этом случае я уверен, что вам придется переключиться на какой-нибудь альтернативный сериализатор .NET Json, поскольку DataContractJsonSerializer довольно строго относится к этому.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню