Во что записывать json в c#?

Есть метод, он отправляет запрос на сервер и получает ответ в json. В какую переменную лучше записывать json для удобного распарса? И как записать метод для возврата этого json? Сейчас у меня это public string и возвращаю я его в строке.

Зелёный.


Ответы (2 шт):

Автор решения: Andrei Khotko

Если известна структура json (а это, я уверен на 99%, так), то создавайте такую же иерархию классов, как и структура json. После этого выполняете примерно следующее:

using System.Net.Http;
using System.Text.Json;

// .....
// Асинхронное получение ответа
var client = new HttpClient();
var responseMessage = await client.GetAsync(requestUrl);
if (responseMessage.IsSuccessStatusCode)
{
    var resultData = await responseMessage.Content.ReadAsStringAsync();
    var result = JsonSerializer.Deserialize<ResponseDataStructure>(resultData);
}

где ResponseDataStructure - описанная вами получаемая структура данных.

P.S. пример на .net Core 3.0+. Вместо стандартного JSON-парсера от .NET можете использовать любой другой.

→ Ссылка
Автор решения: koshe

Можете сериализацию и десериализацию сделать с помощью System.Runtime.Serialization.Json, которую нужно добавить в References. Например:

using System.Runtime.Serialization.Json;

public class TestClass
{      
    public int ID { get; set; }      
    public string Name { get; set; }     
    public int Age { get; set; }
}

private string serialize(TestClass obj)
{
    var ser = new DataContractJsonSerializer(typeof(TestClass));
    using (MemoryStream stream = new MemoryStream())
    {
        ser.WriteObject(stream, obj);
        stream.Position = 0;
        var sr = new StreamReader(stream);
        return sr.ReadToEnd();
    }
}
private TestClass deserialize(string json)
{
    var ser = new DataContractJsonSerializer(typeof(TestClass));
    using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
    {   
        return ser.ReadObject(stream) as TestClass;
    }
}
→ Ссылка