Отключить виртуальный класс

Вопрос:

Я пытаюсь десериализовать объект json, обладающий виртуальным свойством. Пожалуйста, ознакомьтесь с этим минимальным образцом, чтобы проиллюстрировать мою проблему:

Dim jsonInput As String = "{""props"": {""dogOnlyProperty"":42} }"
Dim jss As New JavaScriptSerializer()
Dim stuffObj As Stuff = jss.Deserialize(Of Stuff)(jsonInput)


Public Class Stuff
Public props As Animal.AnimalProperties
End Class

Public MustInherit Class Animal
Public MustInherit Class AnimalProperties
End Class

Public name As String
Public MustOverride Function GetCustomProperties() As AnimalProperties
End Class

Public Class Dog
Inherits Animal

Public Class DogProperties
Inherits AnimalProperties
Public dogOnlyProperty As Integer
End Class

Public Overrides Function GetCustomProperties() As Animal.AnimalProperties
Return New DogProperties()
End Function
End Class

Public Class Cat
Inherits Animal

Public Class CatProperties
Inherits AnimalProperties
Public catOnlyProperty As String
End Class


Public Overrides Function GetCustomProperties() As Animal.AnimalProperties
Return New CatProperties()
End Function
End Class

Приведенный выше код исключает, поскольку сериализатор не знает реальный тип AnimalProperties. Как сообщить сериализатору, что я знаю, что AnimalProperties следует отправлять в DogProperties?

(Если кто-то хочет версию С#, я могу написать его).

Ответ №1

Нашел anwser здесь: Как реализовать пользовательский JsonConverter в JSON.NET для десериализации списка объектов базового класса?

Я изменил собственный сериализатор с помощью JSON.NET и написал пользовательский jsonConverter.

Оцените статью
TechArks.Ru
Добавить комментарий