Если вы хотите сериализовать в строку, сделайте следующее:
var jsonString = JsonConvert.SerializeObject(list);
Чтобы преобразовать обратно, сделайте следующее:
var myList = JsonConvert.DeserializeObject<List<BriefResponseTestingDto>>(jsonString);
Поскольку вы сериализовали List
, это массив и он не будет работать с JObject
. Я бы предложил еще более общий c JToken
, который обрабатывает все случаи. Если вы должны работать с ним в текущем виде, используйте JArray
.
var myjObj = JsonConvert.DeserializeObject<JArray>(jsonString);
Основываясь на моем преобразовании с OP, я хочу иметь возможность добавлять массив к существующему объекту. Есть несколько способов сделать это, но я всегда возвращаюсь к маршруту dynamic
.
Допустим, у нас есть объект, который выглядит так:
{
"hello":"world"
}
и мы хотим добавить массив в качестве родственника к свойству hello
, чтобы он выглядел так:
{
"hello":"world",
"myArray":[1,2,3,4,5]
}
Мы можем выполнить sh это, взяв исходную модель и преобразовав ее в dynamic
. Поскольку мы тесно связаны с Newtonsoft
, я собираюсь воспользоваться этим, позволив этой библиотеке делать тяжелую работу.
Вот метод преобразования объекта в тип ExpandoObject
dynamic
который позволяет вам делать некоторые довольно изящные вещи:
public static dynamic ConvertObjectToExpandoObject(object obj)
{
using (var ms = new MemoryStream())
{
using (var sw = new StreamWriter(ms, Encoding.UTF8, 1024, leaveOpen: true))
using (var jtw = new JsonTextWriter(sw))
{
new JsonSerializer().Serialize(jtw, obj);
}
ms.Position = 0;
using (var sr = new StreamReader(ms))
using (var jtr = new JsonTextReader(sr))
{
return JsonSerializer.CreateDefault(new JsonSerializerSettings
{
Converters = { new ExpandoObjectConverter() }
}).Deserialize<ExpandoObject>(jtr);
}
}
}
Теперь, когда это dynamic
и он понимает семантику ExpandoObject
, мы можем добавить к нему любое свойство как любой тип:
var myDynamic = ConvertObjectToExpandoObject(new { hello = "world" });
myDynamic.myArray = new int[] { 1, 2, 3, 4, 5 };
var jsonString = JsonConvert.SerializeObject(myDynamic);
Здесь вы можете использовать любую модель, которую хотите, даже конкретные модели (а не только анонимный объект). Мы добавили к нему массив, а затем снова сериализовали его. Теперь он будет выглядеть так, как мы хотели.