狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

在C#中使用JSON處理主數據和動態行的子數據的一種方法

admin
2024年8月16日 8:51 本文熱度 695

這個方法有些地方用著還是挺省事,優點,缺點明顯。在現代企業應用程序開發中,處理復雜的主從數據結構是常見的需求。例如,在訂單管理系統中,一個訂單(主數據)會有多個訂單項(子數據)。傳統的關系型數據庫可能需要多表關聯和復雜的事務處理,而通過將子數據保存為JSON字符串,可以簡化這些繁瑣的操作。本文將詳細介紹如何在C#中實現這個過程。

1. 背景介紹

主數據與子數據

主數據與子數據的關系可以通過一個簡單的實例來描述。假設我們有一個訂單表(Order)和訂單項表(OrderItem)。

  • 表結構:

    • Order 表:包含訂單ID、客戶ID、訂單日期等

    • OrderItem 表:包含訂單項ID、訂單ID、商品ID、數量、單價等


優化思路

通過將 OrderItem 轉換為 JSON 字符串,并將其存儲到 Order 表中的一個字段中,可以簡化數據結構和操作復雜性。雖然這種方法降低了數據的規范化程度,但在很多場景下,可以提高開發和維護效率。

2. 示例實現

2.1 創建實體類

我們將創建兩個實體類 OrderOrderItem,并在 Order 類中添加一個字符串屬性 OrderItemsJson 來保存 JSON 格式的訂單項數據。

using System;using System.Collections.Generic;using Newtonsoft.Json; // 需要安裝 NuGet 包:Newtonsoft.Json
public class Order{ public int OrderId { get; set; } public int CustomerId { get; set; } public DateTime OrderDate { get; set; } public string OrderItemsJson { get; set; } // 存儲訂單項的 JSON 字符串}
public class OrderItem{ public int OrderItemId { get; set; } public int ProductId { get; set; } public int Quantity { get; set; } public decimal UnitPrice { get; set; }}

2.2 創建數據示例并序列化為JSON

我們將創建一個包含訂單和訂單項的示例,并將這些訂單項序列化為JSON字符串。

class Program{    static void Main(string[] args)    {        // 創建示例訂單和訂單項        Order order = new Order        {            OrderId = 1,            CustomerId = 123,            OrderDate = DateTime.Now,            OrderItemsJson = SerializeOrderItems(new List<OrderItem>            {                new OrderItem{ OrderItemId = 1, ProductId = 456, Quantity = 2, UnitPrice = 12.50m },                new OrderItem{ OrderItemId = 2, ProductId = 789, Quantity = 3, UnitPrice = 15.00m }            })        };
// 顯示結果 Console.WriteLine("訂單ID: " + order.OrderId); Console.WriteLine("客戶ID: " + order.CustomerId); Console.WriteLine("訂單日期: " + order.OrderDate); Console.WriteLine("訂單項JSON: " + order.OrderItemsJson); }
// 序列化訂單項 static string SerializeOrderItems(List<OrderItem> orderItems) { return JsonConvert.SerializeObject(orderItems); }}

2.3 保存到數據庫

在實際應用中,我們會將訂單數據保存到數據庫中。以EF Core為例,我們可以簡單地將Order對象保存到數據庫中。

Install-Package Microsoft.EntityFrameworkCoreInstall-Package Microsoft.EntityFrameworkCore.SqliteInstall-Package SQLitePCLRaw.bundle_e_sqlite3
using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : DbContext{ public DbSet<Order> Orders { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Data Source=orders.db"); // 配置數據庫連接 }}
// 示例保存過程static void SaveOrderToDatabase(Order order){ using (var context = new ApplicationDbContext()) { context.Database.EnsureCreated(); context.Orders.Add(order); context.SaveChanges(); }}
class Program{ static void Main(string[] args) { // 初始化SQLite庫 Batteries.Init();
// 創建示例訂單和訂單項 Order order = new Order { OrderId = 1, CustomerId = 123, OrderDate = DateTime.Now, OrderItemsJson = SerializeOrderItems(new List<OrderItem> { new OrderItem{ OrderItemId = 1, ProductId = 456, Quantity = 2, UnitPrice = 12.50m }, new OrderItem{ OrderItemId = 2, ProductId = 789, Quantity = 3, UnitPrice = 15.00m } }) };
// 保存訂單到數據庫 SaveOrderToDatabase(order); }
static string SerializeOrderItems(List<OrderItem> orderItems) { return JsonConvert.SerializeObject(orderItems); }}

2.4 從數據庫讀取并反序列化

從數據庫讀取訂單時,可以通過反序列化 OrderItemsJson 字段來恢復訂單項對象列表。

static Order ReadOrderFromDatabase(int orderId){    using (var context = new ApplicationDbContext())    {        return context.Orders.Find(orderId);    }}
static List<OrderItem> DeserializeOrderItems(string orderItemsJson){ return JsonConvert.DeserializeObject<List<OrderItem>>(orderItemsJson);}
class Program{ static void Main(string[] args) { // 根據訂單ID讀取訂單 Order order = ReadOrderFromDatabase(1);
if (order != null) { List<OrderItem> orderItems = DeserializeOrderItems(order.OrderItemsJson); Console.WriteLine("讀取到的訂單ID: " + order.OrderId); Console.WriteLine("訂單項數量: " + orderItems.Count); } else { Console.WriteLine("訂單不存在."); } }}

3. 總結

通過將子數據(如訂單項)轉換為 JSON 字符串并保存到主數據表(如訂單)的一個字段中,我們可以簡化數據庫的設計和操作。雖然這種方法在一定程度上降低了數據的規范化程度,但可以提升開發效率并減少維護成本。在C#中,借助像 Newtonsoft.Json 這樣的庫,我們可以輕松實現數據的序列化和反序列化操作,從而達到我們的目的。


該文章在 2024/8/19 18:29:39 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved