Десериализация json.net - как указать конвертеры для дочерних объектов в графе? - PullRequest
2 голосов
/ 21 февраля 2011

Я пытаюсь выполнить десериализацию с помощью json.net объекта с несколькими детьми.

У меня есть специальный конвертер для преобразования Duty, который наследуется от класса BaseDuty с его Задачами, который отлично работает при вызове с

JsonConvert.Deserialize<Duty>(json, new CustomJsonConverter());

Однако при звонке

JsonConvert.Deserialize<Person>(json,new CustomJsonConverter());

CanConvert пользовательского конвертера json запускается ... но не проверяется, как при вызове класса, для которого он был написан. И что в итоге происходит, так это то, что он продолжает преобразовываться в базовый класс, а это не то, что я хочу делать, так как преобразователь правильно преобразовывает его.

Итак, мой вопрос: как лучше всего указать конвертеры для дочерних объектов на графике, как показано ниже?

Ниже приведен пример:

    public class Person
    {
        public virtual string Name { get; set; }

        public virtual IList<Occupation> Occupations { get;set;}

        public virtual IList<RandomProperty> RandomProperties {get;set;}
    }

    public class Occupation
    {
        public IList<Duty> Duties {get;set;}
    }

public class Duty : BaseDuty
{
   public IList<Task> Tasks {get;set;}
}

public class BaseDuty
{
   public string Name {get;set;}
}

Спасибо

1 Ответ

2 голосов
/ 22 февраля 2011

Как насчет использования JsonConverterAttribute для аннотирования класса Duty - например,

[JsonConverterAttribute(typeof(CustomJsonConverter))]
public class Duty : BaseDuty
{
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...