尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Jot数据存储指南:3步把.NET应用状态保存到JSON文件(含自定义存储教程)

Jot数据存储指南:3步把.NET应用状态保存到JSON文件(含自定义存储教程) Jot数据存储指南3步把.NET应用状态保存到JSON文件含自定义存储教程【免费下载链接】JotJot is a library for persisting and applying .NET application state.项目地址: https://gitcode.com/gh_mirrors/jot1/Jot对于每一个 .NET 桌面应用来说应用状态保存窗口位置、上次输入的数据、用户偏好都是绕不开的刚需。传统做法是手写一堆.settings样板代码重复、易错又难维护。而Jot 数据存储方案可以让你只用几行声明式代码就把应用状态自动持久化到JSON 文件还支持通过IStore接口轻松扩展成自定义存储数据库、云端等。本文面向新手带你用最短路径掌握 Jot 的存储机制。Jot是什么为什么需要它Jot 是一个轻量级的 .NET 应用状态持久化库。它的核心思路只有一句话你只需要声明跟踪哪些对象的哪些属性以及什么时候保存/恢复数据剩下的读写工作全部交给 Jot 完成。相比传统.settings方案Jot 有两个显著优势对比项传统 .settings 方案Jot 方案样板代码每个属性要写 5 处只需声明一次可读性属性海量、易混乱意图清晰、简洁存储介质固定文件JSON 文件 / 自定义存储随意切换安装 Jot一行命令快速上手 ✅Jot 通过 NuGet 分发在包管理器控制台执行一行命令即可install-package Jot安装完成后你只需要创建一个Tracker实例它就是整个应用状态管理的入口负责应用旧数据和持久化新数据两件事。默认JSON文件存储应用状态自动保存到%AppData% 当你直接new Tracker()而不传任何参数时Jot 会使用内置的JsonFileStore把每个被跟踪对象的属性值保存为独立的 JSON 文件存放位置为%AppData%\[公司名]\[应用名]其中公司名和应用名自动从程序集属性读取无需任何配置。每个对象对应一个独立的.json文件这种一对象一文件的设计让读写都很快。来看看实际使用效果——以跟踪 WPF 窗口的位置和大小为例核心代码就两段第一步配置如何跟踪 Window 类型static class Services { public static Tracker Tracker new Tracker(); static Services() { Tracker.ConfigureWindow() .Id(w w.Name, SystemInformation.VirtualScreen.Size) // 分辨率作为命名空间多显示器不串台 .Properties(w new { w.Top, w.Width, w.Height, w.Left, w.WindowState }) .PersistOn(nameof(Window.Closing)) // 关闭时自动保存 .StopTrackingOn(nameof(Window.Closing)); // 关闭后停止跟踪 } }第二步在窗口构造函数中开始跟踪public MainWindow() { InitializeComponent(); Services.Tracker.Track(this); // 恢复上次状态 开始监听保存 }完成窗口大小、位置、最大化状态全都会自动保存到 JSON 文件下次启动自动恢复。这段示例完整源码在 Demo/TestWPF/Services.cs。JSON数据文件长什么样保存到磁盘的 JSON 文件内容大致如下每个属性会记录名称、类型和值[ { Type: System.Double, Name: Width, Value: 1024.0 }, { Type: System.Double, Name: Height, Value: 768.0 }, { Type: System.Double, Name: Top, Value: 120.0 }, { Type: System.Double, Name: Left, Value: 80.0 } ]这些文件由 JsonFileStore.cs 负责读写它内置了类型信息保存、IPAddress特殊类型转换等贴心处理。如何自定义存储路径最快配置方法默认路径虽然够用但有时你想把数据放到每台机器共享的目录或指定任意文件夹只需在创建 Tracker 时传入参数// 方式一存到所有用户共享目录CommonApplicationData var tracker new Tracker(new JsonFileStore(Environment.SpecialFolder.CommonApplicationData)); // 方式二指定任意文件夹 var tracker new Tracker(new JsonFileStore(c:\example\path\));JsonFileStore的构造函数提供了多个重载源码见 JsonFileStore.cs总有一种满足你的路径需求。自定义存储用IStore接口把数据存到任何地方 JSON 文件只是默认实现。Jot 的存储层抽象是IStore接口见 IStore.cs只要实现这 5 个方法就能让 Jot 把应用状态保存到数据库、云端、Redis等任意介质public interface IStore { IEnumerablestring ListIds(); // 列出所有数据ID void SetData(string id, IDictionarystring, object values); // 保存某对象的数据 IDictionarystring, object GetData(string id); // 读取某对象的数据 void ClearData(string id); // 清除单个对象数据 void ClearAll(); // 清除全部数据 }接口极其简单给定一个 ID存/取一个属性名→值的字典。ID 由你配置的Id()规则生成用来区分不同的被跟踪对象。手写一个内存版自定义存储3分钟学会✍️以最简单的内存字典存储为例感受一下自定义存储有多轻松完整示例见 TestStore.csclass InMemoryStore : IStore { Dictionarystring, IDictionarystring, object data new(); public void SetData(string id, IDictionarystring, object values) data[id] values; public IDictionarystring, object GetData(string id) data.TryGetValue(id, out var v) ? v : null; public IEnumerablestring ListIds() data.Keys; public void ClearData(string id) data.Remove(id); public void ClearAll() data.Clear(); } // 使用把自定义存储交给 Tracker 即可 var tracker new Tracker(new InMemoryStore());换存储介质只需要改一行如果你的应用需要跨机器同步设置把SetData/GetData换成调用云 API 或数据库写入即可其余逻辑何时保存、保存哪些属性完全不用动。进阶技巧手动持久化与数据清理 除了事件触发自动保存Jot 还提供了手动控制能力实现在 Tracker.cs手动保存单个对象tracker.Persist(targetObj);全局保存所有存活对象适合退出程序时tracker.PersistAll();忘记某个对象的历史状态tracker.Forget(targetObj);或tracker.Forget(id);清空全部已保存状态tracker.ForgetAll();建议在应用退出时调用一次PersistAll()确保所有变更都已落盘。总结Jot数据存储的关键要点 开箱即用new Tracker()默认用 JsonFileStore应用状态自动保存到%AppData%下的 JSON 文件。存储可替换实现 IStore.cs 接口即可接入数据库、云端等自定义存储。配置声明式ConfigureT()Track()两段代码完成全部工作详见 Tracker.cs。测试有保障官方测试 JsonFileStoreTests.cs 覆盖了基础类型、对象图与特殊类型存储可作为自定义存储的参考。现在你已经掌握了 Jot 数据存储的两大核心——JSON 文件存储与自定义存储。下次为你的 .NET 应用添加状态保存功能时试试用 Jot 替代手写样板代码你会发现原来应用状态持久化可以如此简单【免费下载链接】JotJot is a library for persisting and applying .NET application state.项目地址: https://gitcode.com/gh_mirrors/jot1/Jot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表