сериализация / десериализация производных объектов с использованием JSON.NET без использования JsonProperty?

Я использую библиотеку NewtonSoft JSON.NET для сериализации следующего класса, в котором DTOBase может содержать производные экземпляры.

public class Command
{         
    public DTOBase CommandDTO  { get; set; }                
}

Согласно этой статье вам необходимо включить атрибут JsonProperty, чтобы производные экземпляры десериализовались должным образом.

public class Command
{ 

  [JsonProperty(TypeNameHandling = TypeNameHandling.All)]  
  public DTOBase CommandDTO  { get; set; }       
 }

Вопрос в том, есть ли другой способ, кроме использования атрибута, получить такой же результат? Я бы предпочел не связываться с библиотекой NewtonSoft и сериализацией json, в частности, на уровне классов. Есть ли способ вообще указать некоторые настройки методов сериализации / десериализации библиотеки, чтобы получить тот же результат?


person Abhijeet Patel    schedule 06.06.2011    source источник


Ответы (1)


Свойство TypeNameHandling можно установить на JsonSerializerSettings при вызове JsonConvert.SerializeObject(value, settings).

Если вы хотите, чтобы имя включалось только для производных объектов, установите TypeNameHandling на TypeNameHandling.Auto.

person James Newton-King    schedule 07.06.2011
comment
Привет, Джеймс, я пробовал это, но это не сработало, сериализованная строка не содержит информацию о типе для свойства, как это происходит, когда я использую атрибут JsonProperty. v var settings = new JsonSerializerSettings {TypeNameHandling = TypeNameHandling.All}; string serializedInstance = JsonConvert.SerializeObject (myobject, Formatting.None, настройки); - person Abhijeet Patel; 08.06.2011
comment
Похоже, у меня была более старая версия библиотеки te. Я обновился до последней версии, и JsonSerializerSettings с TypeNameHandling.Auto работает должным образом. - person Abhijeet Patel; 15.06.2011