LiveCharts2四(解析Json文件)

目录

一 上章回顾

二 安装NuGet包

三 定义日志实体类

1 创建LogEntry

四 解析Json日志

五 ParseLogFile

六 创建数据源数组

七 初始化数据源数组

八 总结

九 下章预告


一 上章回顾

一 上章回顾

二 安装NuGet包

三 创建Series

1 创建SeriesLines

2 创建SeriesPie

3 创建 SeriesPolar

四 总结

五 下章预告


二 安装NuGet包

LiveCharts2 支持多种 .NET 平台,为便于学习上手,这里我们选择较为简单的Winform应用程序 。虽然通过 NuGet 搜索仍然能找到旧版本的 LiveCharts,但 LiveCharts2 相对于 V0 进行了许多改进和修复。所以我们在这里学习更新的LiveCharts2,虽然LiveCharts2 目前仍处于开发测试阶段,我们仍然可以通过以下流程进行安装:

  1. 解决方案资源管理器
  2. 项目属性
  3. 管理NuGet程序包
  4. 选择包括预发行版
  5. 搜索LiveChartsCore.SkiaSharpView.WinForms
  6. 选择进行安装


三 定义日志实体类

1 创建LogEntry

创建LogEntry实体类,包括以下属性:

  1. Timestamp 时间戳,用于保存从Json文件中读取的时间
  2. YKData 仪控数据实体,包含了记录的仪控数据变量值
public class LogEntry
{
    public DateTimeOffset Timestamp { get; set; }
    public YKData Data { get; set; }
}

四 解析Json日志

调用解析日志函数,将指定路径日志文件解析成数值,并作为属性创建LogEntry对象

            var logEntries = ParseLogFile("E:\\DownLoad\\WeChat Files\\wxid_wpjpzyzskcqw22\\FileStorage\\File\\2025-06\\CollectData\\CollectData\\bin\\Debug\\Serilogs\\20250630.json");

五 ParseLogFile

解析日志函数具体功能如下所示:

  1. 新建LogEntry集合
  2. 根据传入文件路径读取日志文件,返回JsonLines字符串数组
  3. 遍历JsonLines
  4. 将遍历到的每个Jason对象转换为JsonDocument对象
  5. 获取JsonDocument对象根目录元素
  6. 获取根目录下@t属性,并将时间转化为字符串类型
  7. 将时间解析为DateTimeOffset类型
  8. 增加八个小时,将时间转化为北京标准时间
  9. 获取根目录下YKData属性各子属性,解析为对应数据类型
  10. 将Jsond对象解析出的各子属性创建YKData对象,作为LogEntry子属性
  11. 将创建的LogEntry对象添加到集合中
        static List<LogEntry> ParseLogFile(string filePath)
        {
            //定义日志实体集合
            var entries = new List<LogEntry>();
            //读取日志文件
            var jsonLines = File.ReadAllLines(filePath);

            //遍历JsonLines文件中每个JsonLines对象
            foreach (var line in jsonLines)
            {
                try
                {
                    //转化JsonLines对象为JsonDocument对象
                    using JsonDocument doc = JsonDocument.Parse(line);
                    //获取JsonDocument根元素
                    JsonElement root = doc.RootElement;

                    var entry = new LogEntry
                    {
                        //获取根元素时间戳属性,转化为事件类型并转换为北京时间
                        Timestamp = DateTimeOffset.Parse(root.GetProperty("@t").GetString()).AddHours(8),
                        //获取YKData实体各属性
                        Data = new YKData
                        {
                            GasTotal = root.GetProperty("YKData").GetProperty("GasTotal").GetUInt32(),
                            Heat1Gas = root.GetProperty("YKData").GetProperty("Heat1Gas").GetUInt32(),
                            Heat2Gas = root.GetProperty("YKData").GetProperty("Heat2Gas").GetUInt32(),
                            Heat3Gas = root.GetProperty("YKData").GetProperty("Heat3Gas").GetUInt32(),
                            SoakGas = root.GetProperty("YKData").GetProperty("SoakGas").GetUInt32(),
                            Heat1Air = root.GetProperty("YKData").GetProperty("Heat1Air").GetUInt32(),
                            Heat2Air = root.GetProperty("YKData").GetProperty("Heat2Air").GetUInt32(),
                            Heat3Air = root.GetProperty("YKData").GetProperty("Heat3Air").GetUInt32(),
                            SoakAir = root.GetProperty("YKData").GetProperty("SoakAir").GetUInt32(),
                            BlowerFrequency = root.GetProperty("YKData").GetProperty("BlowerFrequency").GetUInt32(),
                            GasIDFanFrequency = root.GetProperty("YKData").GetProperty("GasIDFanFrequency").GetUInt32(),
                            AirIDFanFrequency = root.GetProperty("YKData").GetProperty("AirIDFanFrequency").GetUInt32(),
                            Heat1TopTemp = root.GetProperty("YKData").GetProperty("Heat1TopTemp").GetUInt32(),
                            Heat2TopTemp = root.GetProperty("YKData").GetProperty("Heat2TopTemp").GetUInt32(),
                            Heat3TopTemp = root.GetProperty("YKData").GetProperty("Heat3TopTemp").GetUInt32(),
                            SoakTopTemp = root.GetProperty("YKData").GetProperty("SoakTopTemp").GetUInt32(),
                            Heat1SetTemp = root.GetProperty("YKData").GetProperty("Heat1SetTemp").GetUInt32(),
                            Heat2SetTemp = root.GetProperty("YKData").GetProperty("Heat2SetTemp").GetUInt32(),
                            Heat3SetTemp = root.GetProperty("YKData").GetProperty("Heat3SetTemp").GetUInt32(),
                            SoakSetTemp = root.GetProperty("YKData").GetProperty("SoakSetTemp").GetUInt32(),
                            Heat1FeedBackTemp = root.GetProperty("YKData").GetProperty("Heat1FeedBackTemp").GetUInt32(),
                            Heat2FeedBackTemp = root.GetProperty("YKData").GetProperty("Heat2FeedBackTemp").GetUInt32(),
                            Heat3FeedBackTemp = root.GetProperty("YKData").GetProperty("Heat3FeedBackTemp").GetUInt32(),
                            SoakFeedBackTemp = root.GetProperty("YKData").GetProperty("SoakFeedBackTemp").GetUInt32(),
                            Heat1AirSmokeFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat1AirSmokeFeedBackTemp").GetUInt32(),
                            Heat2AirSmokeFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat2AirSmokeFeedBackTemp").GetUInt32(),
                            Heat3AirSmokeFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat3AirSmokeFeedBackTemp").GetUInt32(),
                            SoakAirSmokeFeedBackTemp = root.GetProperty("YKData").GetProperty("SoakAirSmokeFeedBackTemp").GetUInt32(),
                            Heat1GasSmokeFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat1GasSmokeFeedBackTemp").GetUInt32(),
                            Heat2GasSmokeFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat2GasSmokeFeedBackTemp").GetUInt32(),
                            Heat3GasSmokeFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat3GasSmokeFeedBackTemp").GetUInt32(),
                            SoakGasSmokeFeedBackTemp = root.GetProperty("YKData").GetProperty("SoakGasSmokeFeedBackTemp").GetUInt32(),
                            Heat1GasPositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat1GasPositionFeedBackTemp").GetUInt32(),
                            Heat2GasPositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat2GasPositionFeedBackTemp").GetUInt32(),
                            Heat3GasPositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat3GasPositionFeedBackTemp").GetUInt32(),
                            SoakGasPositionFeedBackTemp = root.GetProperty("YKData").GetProperty("SoakGasPositionFeedBackTemp").GetUInt32(),
                            Heat1AirPositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat1AirPositionFeedBackTemp").GetUInt32(),
                            Heat2AirPositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat2AirPositionFeedBackTemp").GetUInt32(),
                            Heat3AirPositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat3AirPositionFeedBackTemp").GetUInt32(),
                            SoakAirPositionFeedBackTemp = root.GetProperty("YKData").GetProperty("SoakAirPositionFeedBackTemp").GetUInt32(),
                            Heat1GasSmokePositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat1GasSmokePositionFeedBackTemp").GetUInt32(),
                            Heat2GasSmokePositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat2GasSmokePositionFeedBackTemp").GetUInt32(),
                            Heat3GasSmokePositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat3GasSmokePositionFeedBackTemp").GetUInt32(),
                            SoakGasSmokePositionFeedBackTemp = root.GetProperty("YKData").GetProperty("SoakGasSmokePositionFeedBackTemp").GetUInt32(),
                            Heat1AirSmokePositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat1AirSmokePositionFeedBackTemp").GetUInt32(),
                            Heat2AirSmokePositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat2AirSmokePositionFeedBackTemp").GetUInt32(),
                            Heat3AirSmokePositionFeedBackTemp = root.GetProperty("YKData").GetProperty("Heat3AirSmokePositionFeedBackTemp").GetUInt32(),
                            SoakAirSmokePositionFeedBackTemp = root.GetProperty("YKData").GetProperty("SoakAirSmokePositionFeedBackTemp").GetUInt32(),
                        }
                    };
                    //添加日志实体到集合
                    entries.Add(entry);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"解析错误: {ex.Message}");
                }
            }

            return entries;
        }

六 创建数据源数组

创建时间戳集合和双精度属性集合,

            // 2. 准备图表数据
            var timeValues = new List<DateTime>();
            var GasTotal = new List<double>();
            var Heat1Gas = new List<double>();
            var Heat2Gas = new List<double>();
            var Heat3Gas = new List<double>();
            var SoakGas = new List<double>();
            var Heat1Air = new List<double>();
            var Heat2Air = new List<double>();
            var Heat3Air = new List<double>();
            var SoakAir = new List<double>();
            var BlowerFrequency = new List<double>();
            var GasIDFanFrequency = new List<double>();
            var AirIDFanFrequency = new List<double>();
            var Heat1TopTemp = new List<double>();
            var Heat2TopTemp = new List<double>();
            var Heat3TopTemp = new List<double>();
            var SoakTopTemp = new List<double>();
            var Heat1SetTemp = new List<double>();
            var Heat2SetTemp = new List<double>();
            var Heat3SetTemp = new List<double>();
            var SoakSetTemp = new List<double>();
            var Heat1FeedBackTemp = new List<double>();
            var Heat2FeedBackTemp = new List<double>();
            var Heat3FeedBackTemp = new List<double>();
            var SoakFeedBackTemp = new List<double>();
            var Heat1AirSmokeFeedBackTemp = new List<double>();
            var Heat2AirSmokeFeedBackTemp = new List<double>();
            var Heat3AirSmokeFeedBackTemp = new List<double>();
            var SoakAirSmokeFeedBackTemp = new List<double>();
            var Heat1GasSmokeFeedBackTemp = new List<double>();
            var Heat2GasSmokeFeedBackTemp = new List<double>();
            var Heat3GasSmokeFeedBackTemp = new List<double>();
            var SoakGasSmokeFeedBackTemp = new List<double>();
            var Heat1GasPositionFeedBackTemp = new List<double>();
            var Heat2GasPositionFeedBackTemp = new List<double>();
            var Heat3GasPositionFeedBackTemp = new List<double>();
            var SoakGasPositionFeedBackTemp = new List<double>();
            var Heat1AirPositionFeedBackTemp = new List<double>();
            var Heat2AirPositionFeedBackTemp = new List<double>();
            var Heat3AirPositionFeedBackTemp = new List<double>();
            var SoakAirPositionFeedBackTemp = new List<double>();
            var Heat1GasSmokePositionFeedBackTemp = new List<double>();
            var Heat2GasSmokePositionFeedBackTemp = new List<double>();
            var Heat3GasSmokePositionFeedBackTemp = new List<double>();
            var SoakGasSmokePositionFeedBackTemp = new List<double>();
            var Heat1AirSmokePositionFeedBackTemp = new List<double>();
            var Heat2AirSmokePositionFeedBackTemp = new List<double>();
            var Heat3AirSmokePositionFeedBackTemp = new List<double>();
            var SoakAirSmokePositionFeedBackTemp = new List<double>();

七 初始化数据源数组

遍历LogEntry数组,依次读取所有属性,并分类存入对应的数据源数组中

            foreach (var entry in logEntries)
            {
                timeValues.Add(entry.Timestamp.DateTime);
                GasTotal.Add(entry.Data.GasTotal);
                Heat1Gas.Add(entry.Data.Heat1Gas);
                Heat2Gas.Add(entry.Data.Heat2Gas);
                Heat3Gas.Add(entry.Data.Heat3Gas);
                SoakGas.Add(entry.Data.SoakGas);
                Heat1Air.Add(entry.Data.Heat1Air);
                Heat2Air.Add(entry.Data.Heat2Air);
                Heat3Air.Add(entry.Data.Heat3Air);
                SoakAir.Add(entry.Data.SoakAir);
                BlowerFrequency.Add(entry.Data.BlowerFrequency);
                GasIDFanFrequency.Add(entry.Data.GasIDFanFrequency);
                AirIDFanFrequency.Add(entry.Data.AirIDFanFrequency);
                Heat1TopTemp.Add(entry.Data.Heat1TopTemp);
                Heat2TopTemp.Add(entry.Data.Heat2TopTemp);
                Heat3TopTemp.Add(entry.Data.Heat3TopTemp);
                SoakTopTemp.Add(entry.Data.SoakTopTemp);
                Heat1SetTemp.Add(entry.Data.Heat1SetTemp);
                Heat2SetTemp.Add(entry.Data.Heat2SetTemp);
                Heat3SetTemp.Add(entry.Data.Heat3SetTemp);
                SoakSetTemp.Add(entry.Data.SoakSetTemp);
                Heat1FeedBackTemp.Add(entry.Data.Heat1FeedBackTemp);
                Heat2FeedBackTemp.Add(entry.Data.Heat2FeedBackTemp);
                Heat3FeedBackTemp.Add(entry.Data.Heat3FeedBackTemp);
                SoakFeedBackTemp.Add(entry.Data.SoakFeedBackTemp);
                Heat1AirSmokeFeedBackTemp.Add(entry.Data.Heat1AirSmokeFeedBackTemp);
                Heat2AirSmokeFeedBackTemp.Add(entry.Data.Heat2AirSmokeFeedBackTemp);
                Heat3AirSmokeFeedBackTemp.Add(entry.Data.Heat3AirSmokeFeedBackTemp);
                SoakAirSmokeFeedBackTemp.Add(entry.Data.SoakAirSmokeFeedBackTemp);
                Heat1GasSmokeFeedBackTemp.Add(entry.Data.Heat1GasSmokeFeedBackTemp);
                Heat2GasSmokeFeedBackTemp.Add(entry.Data.Heat2GasSmokeFeedBackTemp);
                Heat3GasSmokeFeedBackTemp.Add(entry.Data.Heat3GasSmokeFeedBackTemp);
                SoakGasSmokeFeedBackTemp.Add(entry.Data.SoakGasSmokeFeedBackTemp);
                Heat1GasPositionFeedBackTemp.Add(entry.Data.Heat1GasPositionFeedBackTemp);
                Heat2GasPositionFeedBackTemp.Add(entry.Data.Heat2GasPositionFeedBackTemp);
                Heat3GasPositionFeedBackTemp.Add(entry.Data.Heat3GasPositionFeedBackTemp);
                SoakGasPositionFeedBackTemp.Add(entry.Data.SoakGasPositionFeedBackTemp);
                Heat1AirPositionFeedBackTemp.Add(entry.Data.Heat1AirPositionFeedBackTemp);
                Heat2AirPositionFeedBackTemp.Add(entry.Data.Heat2AirPositionFeedBackTemp);
                Heat3AirPositionFeedBackTemp.Add(entry.Data.Heat3AirPositionFeedBackTemp);
                SoakAirPositionFeedBackTemp.Add(entry.Data.SoakAirPositionFeedBackTemp);
                Heat1GasSmokePositionFeedBackTemp.Add(entry.Data.Heat1GasSmokePositionFeedBackTemp);
                Heat2GasSmokePositionFeedBackTemp.Add(entry.Data.Heat2GasSmokePositionFeedBackTemp);
                Heat3GasSmokePositionFeedBackTemp.Add(entry.Data.Heat3GasSmokePositionFeedBackTemp);
                SoakGasSmokePositionFeedBackTemp.Add(entry.Data.SoakGasSmokePositionFeedBackTemp);
                Heat1AirSmokePositionFeedBackTemp.Add(entry.Data.Heat1AirSmokePositionFeedBackTemp);
                Heat2AirSmokePositionFeedBackTemp.Add(entry.Data.Heat2AirSmokePositionFeedBackTemp);
                Heat3AirSmokePositionFeedBackTemp.Add(entry.Data.Heat3AirSmokePositionFeedBackTemp);
                SoakAirSmokePositionFeedBackTemp.Add(entry.Data.SoakAirSmokePositionFeedBackTemp);

            }

八 总结

以上我给大家介绍了安装NuGet包、定义日志实体类、解析Json日志、ParseLogFile、创建属性数据源数组、初始化数据源数组等内容。


九 下章预告

下一章我会教大家如何根据完成初始化的数据源数组生成PLC数据趋势。


博主RaymondLeigh:如果您觉得本文为您提供了结局思路或解决了您的实际问题,麻烦您🙏帮忙点赞、收藏、评论、关注一键四连,您的举手之劳将为我写作提供动力源泉!🤞

print('Hello,RaymondLeigh!')  # 每日问候,跟大家问好!

🔥精品框架专栏:Prism专栏 WPF专栏 


🌞精品前端UI设计专栏:MaterialDesign专栏 LiveCharts2专栏


💾精品数据库专栏:SqlServer专栏 EFCore专栏 Oracle专栏


💻精品程序开发专栏  VisualStudio专栏


💻精品后端专栏 Scoket专栏  SiemensS7数采 TIA Portal编程 OPCUA专栏 


💾精品解析专栏 Serilog日志解析 FormatConverter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值