Отправка SQL-данных в WEB API в массиве JSON
Привет, я ищу несколько указателей для API, который я пишу. Цель с помощью API, чтобы отправить детали для внешней компании, поэтому форматирование результирующего JSON является фиксированной.
С этого мы и начнем...
[ { "order_id": 1, "customer_no": 1, "items": [ { "itemid": "12345", "qty": 1, "discount_amount": 20, "original_amount": 100, "total_amount": 80 } { "itemid": "67890", "qty": 1, "discount_amount": 20, "original_amount": 100, "total_amount": 80 } ], "grandtotal": 160, "createddate": "2020-08-26" } { "order_id": 2, "customer_no": 1, "items": [ { "itemid": "12345", "qty": 1, "discount_amount": 20, "original_amount": 100, "total_amount": 80 } ], "grandtotal": 80, "createddate": "2020-08-26" } ]
Поэтому, чтобы добраться до этой конечной точки, я могу быть довольно гибким. Мне удалось получить order_id, customer_no, grand_total и созданную дату, чтобы выйти в моем json, но ничего в разделе items.
Что я уже пробовал:
Это моя модель, которую я использовал, чтобы получить информацию заголовка для заказа...
public class readOrder : jsonOrder { public readOrder(DataRow row) { order_id = row["order_id"].ToString(); customer_no = row["customer_no"].ToString(); //items.itemid= row["itemid"].ToString(); grandtotal = Convert.ToDecimal(row["grandtotal"]); createddate = row["createddate"].ToString(); } } public class jsonOrder { public string order_id { get; set; } public string customer_no { get; set; } public orderitem items { get; set; } public decimal grandtotal { get; set; } public string createddate { get; set; } } public class orderitem { public string itemid{ get; set; } public int qty { get; set; } public decimal discount_amount { get; set; } public decimal original_amount { get; set; } public decimal total_amount { get; set; } }и мой контроллер...
public HttpResponseMessage Get(string customer_no) { _con = new SqlConnection(ConfigurationManager.ConnectionStrings["xxxx_Connection"].ConnectionString); // Get all orders DataTable ordHead = new DataTable(); var queryHead = "Select * from ORDERHEADER where customer_no = " + customer_no; _Header_adapt = new SqlDataAdapter { SelectCommand = new SqlCommand(queryHead,_con) }; _Header_adapt.Fill(ordHead); //Get items within orders DataTable ordDetail = new DataTable(); var queryDetail = "Select * from ORDERHISTORY where customer_no = " + customer_no; _adapt = new SqlDataAdapter { SelectCommand = new SqlCommand(queryDetail, _con) }; _adapt.Fill(ordDetail); List<readOrder> orderhistory = new List<Models.readOrder>(ordHead.Rows.Count); if (ordHead.Rows.Count > 0) { //var retd = new jsonOrder(); //var jsonOrdHist = JsonConvert.SerializeObject(retd); foreach (DataRow orders in ordHead.Rows) { orderhistory.Add(new readOrder(orders)); } } return Request.CreateResponse(HttpStatusCode.OK, orderhistory); }это дает мне результаты...
[ { "order_id": "102535", "customer_no": "123", "items": null, "grand_total": 6.0000, "created_at": "08/07/2010 00:00:00" }, { "order_id": "10929", "customer_12": "123", "items": null, "grand_total": 28.8000, "created_at": "28/03/2019 00:00:00" } ]
Что мне нужно сделать, чтобы заполнить раздел "элементы" массивом элементов.
Я могу отформатировать данные любым требуемым способом, то есть одно представление со всеми данными, или, как у меня есть на данный момент, одно представление с информацией заголовка и одно с деталями заказа. Это выход, который мне нужен, чтобы получить правильный.
Код немного неуклюжий, так как я весь день пробовал разные вещи!
Спасибо
--- ОБНОВЛЕНИЕ ---
Я потратил еще несколько часов на поиск в интернете некоторых подсказок для этого, но до сих пор не могу найти работоспособного решения, хотя это было бы то, что я считал бы обычно используемой задачей?