Как я могу десериализовать объект json в строку json? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть следующее json:

{
  "name" : "tim",
  "items" : {
    "car" : "Mercedes",
    "house" : "2 Bedroom"
  }
}

Объект для десериализации:

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

Я хочу десериализовать items в строку json объект. Так что Items в этом примере должно быть

"{\"car\" : \"Mercedes\",\"house\" : \"2 Bedroom\"}"

Меня не волнует интервал, такой как вкладки или новые строки. Как я могу сделать это, используя Newtonsoft.Json? Я попытался сделать JsonConverter<string>, как показано здесь , но reader.Value выглядит как null.

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

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

После некоторой помощи от других ответов здесь и еще раз просмотрев документы, я обнаружил метод JObject.Load. Мой конвертер теперь работает и выглядит следующим образом:

public class StringConverter : JsonConverter<String>
{
    public override void WriteJson(JsonWriter writer, String value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override Version ReadJson(JsonReader reader, Type objectType, Version existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        return JObject.Load(reader).ToString();
    }
}

И теперь я могу использовать такой атрибут:

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

    [JsonConverter(typeof(StringConverter))]
    public string Items {get;set;}
}
0 голосов
/ 10 апреля 2020

Это так же просто, как:

var person = JsonConvert.DeserializeObject<Person>(json);
string itemsJson = JsonConvert.SerializeObject(person.Items);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...