Arhn - архитектура программирования

Десериализовать JSON по одному элементу за раз без Json.NET

как лучше всего десериализовать JSON-файл по одному элементу за раз? У меня большой JSON-файл, и я не могу прочитать его в строку, потому что получаю сообщение об ошибке: "В mscorlib.dll произошло необработанное исключение типа System.OutOfMemoryException"

Как я могу десериализовать этот JSON-файл по одному элементу за раз, не используя Json.NET? Я нашел это, но он использует Json.NET: Deserialize поток массива json по одному элементу за раз

(Я думаю, что мне нужно использовать StreamReader, когда я читаю файл, но как я могу его десериализовать?)

Я создал DataContract:

[DataContract]
public class Header
{
    [DataMember(Name = "time")]
    public string time { get; set; }
    [DataMember(Name = "code")]
    public string code { get; set; }
    [DataMember(Name = "type")]
    public string type { get; set; }
    [DataMember(Name = "value")]
    public string value { get; set; }
}

[DataContract]
public class Body : IDeserializationCallback
{
    [DataMember(Name = "file")]
    public string file { get; set; }
    [DataMember(Name = "title")]
    public string title { get; set; }
    [DataMember(Name = "rows")]
    public List<string> rows { get; set; }

    public Dictionary<int, string> RowHeaders { get; protected set; }

    public void OnDeserialization(object sender)
    {
        RowHeaders = new Dictionary<int, string>();
        String[] headers = this.title.Split(';');
        for (int i = 0; i < headers.Length; i++)
        {
            RowHeaders.Add(i);
        }
    }
}

[DataContract]
public class Dwresult
{
    [DataMember(Name = "header")]
    public Header header { get; set; }
    [DataMember(Name = "body")]
    public List<Body> body { get; set; }
}

[DataContract]
public class RootObject
{
    [DataMember(Name = "dwresult")]
    public Dwresult dwresult { get; set; }
}

Вот пример JSON:

{
"dwresult": {
    "header": { 
    "time": "2015.08.02 10:14:51",
    "code": "OK",
    "type": "TEST",
    "count": "2"
     },
        "body": [{
    "file": "test_file_one",
    "title": "EXAMPLE1;EXAMPLE2;EXAMPLE3;EXAMPLE4;EXAMPLE5;EXAMPLE6;EXAMPLE7;EXAMPLE8;EXAMPLE9;EXAMPLE10;EXAMPLE11;EXAMPLE12;EXAMPLE13;EXAMPLE14;EXAMPLE15;EXAMPLE16;EXAMPLE17;EXAMPLE18;EXAMPLE19;EXAMPLE20;",
    "rows": [
    "1;NAME1;CODE1;;;123;DATA1;1;1;1.2;;TOWN;3;1990;1991;2000;;;ACCOUNT;DOWNLOADED;",
    "2;NAME2;CODE2;;;456;DATA2;2;2;2.3;;TOWN2;4;1991;1992;2001;;;ACCOUNT;DOWNLOADED;",
    "3;NAME3;CODE3;;;789;DATA3;3;3;3.4;;TOWN3;5;1992;1993;;PERSON;AGE;AC;DOWNLOADED;",
     ]
    },{
    "file": "test_file_two",
    "title": "ANOT_EXAMPLE1;ANOT_EXAMPLE2;ANOT_EXAMPLE3;ANOT_EXAMPLE4;ANOT_EXAMPLE5;ANOT_EXAMPLE6;ANOT_EXAMPLE7;ANOT_EXAMPLE8;ANOT_EXAMPLE9;ANOT_EXAMPLE10;ANOT_EXAMPLE11;ANOT_EXAMPLE12;ANOT_EXAMPLE13;ANOT_EXAMPLE14;ANOT_EXAMPLE15;ANOT_EXAMPLE16;ANOT_EXAMPLE17;ANOT_EXAMPLE18;ANOT_EXAMPLE19;ANOT_EXAMPLE20;ANOT_EXAMPLE21;ANOT_EXAMPLE22;ANOT_EXAMPLE23;ANOT_EXAMPLE24;ANOT_EXAMPLE25;ANOT_EXAMPLE26;ANOT_EXAMPLE27;ANOT_EXAMPLE28;ANOT_EXAMPLE29;ANOT_EXAMPLE30;ANOT_EXAMPLE31;ANOT_EXAMPLE32;ANOT_EXAMPLE33;ANOT_EXAMPLE34;",
    "rows": [
    "4;NAME4;SCHOOL;;;01;DATA1;1;TOWN;04;;2011;2012;;;1;;;;PERSON;NUMBER;;;;;;;;;56;ACCOUNT;;;DOWNLOADED;",
    "5;NAME5;SCHOOL;;;02;DATA2;2;TOWN2;05;;2012;2013;;;2;;;;PERSON;NUMBER;;;;;;;;;57;ACCOUNT;;;DOWNLOADED;",
    "6;NAME6;SCHOOL;;;03;DATA3;3;TOWN3;06;;2013;2014;;;3;;31;;PERSON;NUMBER;;;;;;;;;58;ACCOUNT;;;DOWNLOADED;",
     ]
    }
    ]
}
}
10.08.2015

  • Как объекты json в файле разделены? образец из вашего json-файла? 10.08.2015
  • Десериализация JSON.NET не сохраняет ничего лишнего в памяти; парсер и доступ к потоку полностью односторонние, без обратного отслеживания или кэширования. Как вы читаете файл для десериализации? 10.08.2015
  • Откуда возникло требование no Json.NET? 10.08.2015
  • Моя идея состоит в том, чтобы использовать этот код в компоненте SSIS-скрипта, и я не уверен, что Json.NET может вызвать какие-либо проблемы. Вот почему я попросил помощи без Json.NET. :) 11.08.2015
  • @Mark78 SSIS не имеет проблем с JSON.NET 11.08.2015
  • Написание сериализации\десериализации вручную — непростая задача. Я бы попытался получить исходники Json.Net и интегрировать их в ваш проект, если вы не можете использовать пакет Nuget. 11.08.2015
  • Может ли кто-нибудь привести хороший пример, как я могу десериализовать свой большой файл с помощью Json.NET? Спасибо. 11.08.2015
  • @Mark78 Вы пробовали искать ТАК? - stackoverflow.com/questions/8157636/ 03.09.2015

Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..