Я записываю данные в формат JSON, которые будут использоваться другой программой. Мне нужно сериализовать большое количество объектов JSON в файл. Использование Json.NET это действительно прямо вперед сериализовать следующие строки кода:Пользовательская сериализация и десериализация JSON.net
[JsonConverter(typeof(SimpleClassSerializer))]
public class SimpleClass
{
public string name;
}
SimpleClass obj1 = new SimpleClass { name="exampleObj1" };
string serialised = JsonConvert.SerializeObject(obj1, Formatting.Indented);
Давая выход:
{
"name": "exampleObj1"
}
Я на самом деле будет работать с несколькими SimpleClass (например, класс) объектов и хотите их сериализовать (как я их получаю).
Используя следующий пример кода, это красиво и просто, если у меня есть массив или список:
SimpleClass[] arr1 = new SimpleClass[3];
SimpleClass obj1 = new SimpleClass { name="exampleObj1" };
SimpleClass obj2 = new SimpleClass { name = "exampleObj2" };
SimpleClass obj3 = new SimpleClass { name = "exampleObj3" };
arr1[0] = obj1;
arr1[1] = obj2;
arr1[2] = obj3;
string serialised = JsonConvert.SerializeObject(arr1, Formatting.Indented);
дает мне следующий вывод:
[
{
"name": "exampleObj1"
},
{
"name": "exampleObj2"
},
{
"name": "exampleObj3"
}
]
Это легко десериализованное в массив ,
Однако я не могу объявить массив вперед (например, string [] arr = new string [50000]), потому что я не знаю числа объектов, с которыми я имею дело, и из-за ограничений памяти (данные в каждом объекте огромный). Я не могу использовать список в основном из-за ограничений памяти.
Если я сделать следующее:
SimpleClass obj1 = new SimpleClass { name="exampleObj1" };
SimpleClass obj2 = new SimpleClass { name = "exampleObj2" };
SimpleClass obj3 = new SimpleClass { name = "exampleObj3" };
string serialised = JsonConvert.SerializeObject(obj1, Formatting.Indented);
serialised += JsonConvert.SerializeObject(obj2, Formatting.Indented);
serialised += JsonConvert.SerializeObject(obj3, Formatting.Indented);
Давая мне это:
{
"name": "exampleObj1"
}{
"name": "exampleObj2"
}{
"name": "exampleObj3"
}
Главное здесь в том, что у меня есть открытый файл, и я потокового сериализованные объекты в файл как Я их получаю. Дайте мне этот формат, показанный выше. При попытке десериализовать такой объект я получаю сообщение об ошибке, поскольку он в основном ожидает, что он будет массивом.
Каков наилучший подход к непрерывной сериализации таким образом?
В идеале, если бы я мог выполнить некоторую сериализацию, когда начинаю писать «[» в файл в начале и «]» в конце (и между запятыми между каждым объектом!), То потребительское приложение может десериализоваться в массив. Как мне это сделать?
Json.net имеет JsonWriter и JsonSerializer. Смотрите это сообщение Джеймс Ньютон-Кинг. http://james.newtonking.com/archive/2009/02/14/writing-json-to-a-file-using-json-net – cgotberg
Блестящий! Это было действительно полезно! –