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

Как вернуть сложный объект Json из C# DataTable

В настоящее время мы используем Newtonsoft.Json для преобразования таблицы данных в поток json.

Если мой datatable включает в себя следующее:

Name    Sales
Joe     10
Mary    20

тогда следующий код вернет [{"Name": "Joe", "Sales":10},{"Name": "Mary", "Sales":20}], и это здорово:

 string callback = JsonConvert.SerializeObject(table);
 byte[] resultBytes = Encoding.UTF8.GetBytes(callback);
 return new System.IO.MemoryStream(resultBytes);

Но бывают случаи, когда мне нужен более сложный поток json. Что-то вроде этого:

{ "map": "USA", "areas":[{"Name": "Joe", "Sales":10},{"Name": "Mary", "Sales":20}]}

JSON теперь включает дополнительный кортеж { "map": "USA", "areas": и дополнительный кортеж {}.

Что нужно включить в мою таблицу данных, чтобы получить поток json такого типа? И как должен выглядеть C#?

12.10.2017

  • Не могли бы вы добавить больше пояснений о том, что вы делаете, когда у вас есть только имя и продажи? 12.10.2017
  • Зачем вообще использовать DataTable? Почему бы не устранить его и просто использовать строго типизированные объекты? 12.10.2017
  • Это используется для диаграммы, а для диаграммы требуется { "map": "USA", "areas": в начале потока json. 12.10.2017
  • @mason, я ценю твой комментарий, но вопрос не в том, как заменить таблицу данных чем-то другим. 12.10.2017
  • @rbhat Да, вроде так. DataTable представляет плоские данные. Он не очень хорошо обрабатывает иерархические данные. Класс гораздо лучше подходит для представления иерархических данных. Кроме того, с классами вы получаете преимущество строгой типизации и меньшего использования памяти. Если вы не хотите использовать строго типизированные классы, вам придется вручную генерировать JSON с помощью других API, предлагаемых JSON.NET. Гораздо более болезненно, чем использование строго типизированного класса для представления ваших данных. 12.10.2017
  • Понял. Не могли бы вы привести пример вызова из класса C# хранимой процедуры tsql, которая в итоге вернет поток json в указанном формате? 12.10.2017

Ответы:


1

Вам нужно будет определить новый класс и сериализовать весь объект следующим образом:

// Define the class / model
public class MyNewClass {
// Case sensitive vvv to match your Json
    public string map {get; set;}
    public DataTable areas {get; set;}
    // you can have several constructor methods defined, I show the usage for each below.
    public MyNewClass() {}
    public MyNewClass(string countryMap, DataTable table) {
        map = countryMap;
        areas = table;
    }
}

Применение:

// Instantiate the object from the class / model
var returnData = new MyNewClass("USA", table);
// or
var returnData2 = new MyNewClass();
returnData2.map = "USA";
returnData2.areas = table;

// Finally serialize your object
var yourJson = JsonConvert.SerializeObject(returnData);
// or
var yourJosn2 = JsonConvert.SerializeObject(returnData2);
12.10.2017
  • @rbhat это не ответ на твой вопрос? 12.10.2017

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

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге 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 , и использованием..

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