男女做爽爽爽网站-男女做羞羞高清-男女做爰高清无遮挡免费视频-男女做爰猛烈-男女做爰猛烈吃奶啪啪喷水网站-内射白浆一区

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

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

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

這個方法有些地方用著還是挺省事,優點,缺點明顯。在現代企業應用程序開發中,處理復雜的主從數據結構是常見的需求。例如,在訂單管理系統中,一個訂單(主數據)會有多個訂單項(子數據)。傳統的關系型數據庫可能需要多表關聯和復雜的事務處理,而通過將子數據保存為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

主站蜘蛛池模板: 二区三国产 | 五月色综合无码一区二区三区 | 精品人妻系列无码一区二区三 | 亚洲aⅴ鲁丝一区二区三区 亚洲AⅤ鲁丝一区二区三区 | 国产一区二区在线观看免费 | 久久国产露脸精品国产麻豆 | 精品国产一区二区三区香蕉在线 | 成人一区二区三区综合区精品久久久中文字幕一区 | 久久不卡一区 | 亚洲欧洲国产日产国码无码 | 国产成人久久精品激情 | 国产无码二区三区 | 亚洲精品爆乳无码a片成田梨纱 | 国产乱码一二三区精品 | 色哟哟无码精品一区二区三区 | a级毛片精品免费看 | 久久99精品久久久久久苹果 | 亚洲国产精品张柏芝在线观看 | 久久久久久免费国产精品中文字幕 | 狂野欧美性猛交xxxx免费 | 日日躁夜夜躁狠狠久久AV | 五月婷婷丁香花综合网 | 波多野结衣办公室jian 情 | 欧美日韩国产在线观看不卡高清 | 日本无码特黄午夜视频在线观看 | 5566少妇人妻一区二区三区 | 久久久亚洲东京热 | 久久日本片精品AAAAA国产 | 久久国产高清字幕中文 | 视频一区欧美 | 久久这里只精品热在线99 | 精品人妻无码日本一区二区三区 | 美女扒开让男人桶 | 亚洲一区二区黄色 | 欧美精品国产综合久久 | 久久99这里只精品热在线 | 人妻丰满a | 亚洲无线一线二线三W9 | 欧美日本国产xxxxx视频 | 日本精品三级 | md豆传媒|