Преобразование списка в формат json - быстрый и простой способ
Скажем, у меня есть объект MyObject, который выглядит так:
public class MyObject
{
int ObjectID {get;set;}
string ObjectString {get;set;}
}
У меня есть список MyObject, и я хочу преобразовать его в строку json с помощью stringbuilder. Я знаю, как создать JavascriptConverter и создать строку json, передав список и создав конвертер строкой, но в этом конкретном случае я стараюсь избежать накладных расходов и перейти прямо к строке json с циклом foreach в списке например:
StringBuilder JsonString = new StringBuilder();
foreach(MyObject TheObject in ListOfMyObject)
{
}
Я попытался использовать этот метод, добавив с запятыми и кавычками, но он еще не сработал (пока).
Спасибо за ваши предложения.
Ответы
Ответ 1
Я сделал что-то вроде использования класса сериализации JavaScript:
using System.Web.Script.Serialization;
и
JavaScriptSerializer jss = new JavaScriptSerializer();
string output = jss.Serialize(ListOfMyObject);
Response.Write(output);
Response.Flush();
Response.End();
Ответ 2
Спустя 3 года опыта я вернулся к этому вопросу и предлагаю написать его вот так:
string output = new JavaScriptSerializer().Serialize(ListOfMyObject);
Одна строка кода.
Ответ 3
Для меня он работал с Newtonsoft.Json:
using Newtonsoft.Json;
// ...
var output = JsonConvert.SerializeObject(ListOfMyObject);
Ответ 4
Я бы не стал кататься самостоятельно и использовать либо:
System.Web.Script.JavascriptSerializer
или
JSON.net
Оба отлично справятся:)
Ответ 5
зачем изобретать колесо? используйте microsoft json serialize или стороннюю библиотеку, такую как json.NET
Ответ 6
Я предпочитаю использовать функцию linq-to-json JSON.NET. Здесь вы можете сериализовать список ваших объектов в json.
List<MyObject> list = new List<MyObject>();
Func<MyObject, JObject> objToJson =
o => new JObject(
new JProperty("ObjectId", o.ObjectId),
new JProperty("ObjectString", o.ObjectString));
string result = new JObject(new JArray(list.Select(objToJson))).ToString();
Вы полностью контролируете, что будет в строке json результата, и вы ясно видите, что это просто смотрит на код. Разумеется, вы можете избавиться от объявления Func<T1, T2>
и указать этот код непосредственно в вызове new JArray()
, но с этим кодом, извлеченным в Func<>
, он выглядит намного понятнее, что происходит и как вы фактически трансформируете свой объект в json. Вы даже можете хранить Func<>
вне этого метода в каком-то способе настройки (т.е. В конструкторе).