JSON.Net – Как десериализовать JSON в объект, но рассматривать свойство как строку вместо JSON?

У меня есть некоторый JSON, который я хотел бы десериализовать, но я хочу рассматривать одно из свойств как строку, а не как объект.

Например, JSON выглядит так:

{
  "name":"Frank",
  "sex":"male",
  "address": {
               "street":"nowhere st",
               "foo":"bar"
             }
}

И я хочу десериализовать его в этот объект. Обработка объекта адреса как строкового литерала:

public class Person
{
   public string name;
   public string sex;
   public string address;
}

Я пытался буквально десериализовать его в этот объект, но получаю ошибку:

Невозможно десериализовать объект JSON в тип System.String.

Есть идеи?

Ваше здоровье


person Tyler    schedule 31.03.2012    source источник


Ответы (1)


Самый простой способ — изменить класс Person и создать класс Address для свойства Address, например:

public class Person
{
   public string name;
   public string sex;
   public Address address;
}

public class Address
{
   public string street; 
   public string foo;
}

Это позволит JSON.NET десериализовать объект адреса для вас.

Если вы не можете изменить свой класс, я полагаю, что решение должно будет обрабатывать десериализацию Person вручную.

person Community    schedule 31.03.2012
comment
Хотя это решение для этого конкретного примера. Что делать, если возвращаемые свойства различаются? А вы не знаете всех возможных свойств? Тогда хотелось бы строку еще. Технически это не ответ на вопрос ОП. - person Mike de Klerk; 05.08.2020