Во что записывать json в c#?
Есть метод, он отправляет запрос на сервер и получает ответ в json. В какую переменную лучше записывать json для удобного распарса? И как записать метод для возврата этого json? Сейчас у меня это public string и возвращаю я его в строке.
Зелёный.
Ответы (2 шт):
Если известна структура 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 можете использовать любой другой.
Можете сериализацию и десериализацию сделать с помощью 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;
}
}