Imports Newtonsoft.Json Imports Newtonsoft.Json.Converters Namespace UTSModule.Service ''' ''' 应用程序与服务通讯协议类,可将此类序列化为Json字符串或反序列化Json字符串为此类 ''' ''' 更改须知: ''' 当需要增加不参与序列化的共有字段时, ''' 在变量名上一行,参照JsonFilter字段增加JsonIgnore特性. ''' ''' 当需要增加命令名称类型时, ''' 首先在CmdNamesEnum中增加枚举字段, ''' 之后在FilterFiled函数中,增加指定命令名称中需要序列话的字段名数组. ''' ''' 2021-03-26 ''' 增加软件与设备通讯命令,用于注册软件 InitApp ''' ''' Public Class TaskJsonParam '发送 ''' ''' 发送控制命令时,通信的用户账号 ''' Public User As String ''' ''' 发送控制命令时,执行程序名 ''' Public AppName As String ''' ''' 通讯时使用的命令名称 ''' Public CmdName As CmdNamesEnum ''' ''' 用户存储服务中任务信息 ''' Public TasksInfo As List(Of Dictionary(Of String, String)) ''' ''' 指定需要控制的任务名称集合 ''' Public TasksName As List(Of String) ''' ''' 回复命令时,指示命令执行的状态 ''' Public CmdStatus As String ''' ''' 回复命令时,指定命令执行后的提示信息 ''' Public CmdMsg As String ''' ''' 回复命令时,获取当前服务的版本号 ''' Public ServiceVersion As String ''' ''' 发送与恢复时,软件信息 ''' Public AppInfo As Dictionary(Of String, String) ''' ''' 是否为回复数据 ''' Public IsReply As Boolean ''' ''' 是否启用筛选功能,默认为启用筛选功能 ''' 此字段不参与Json序列化 ''' Public Shared Property JsonFilter As Boolean ''' ''' Json序列化时的显示格式,分行对齐显示或是单行无格式显示,默认单行显示 ''' 此字段不参与Json序列化 ''' Public Shared Property JsonFormat As Formatting ''' 任务命令执行状态列表 Enum CmdStatusEnum Pass Fail End Enum ''' 任务命令列表 Enum CmdNamesEnum ''' 添加任务 AddTasks ''' 设置任务 SetTasks ''' 获取任务 GetTasks ''' 获取所有任务 GetAllTasks ''' 删除任务 DeleteTasks ''' 删除所有任务 DeleteAllTasks ''' 开启任务 StartTasks ''' 开启所有任务 StartAllTasks ''' 暂停任务 StopTasks ''' 暂停所有任务 StopAllTasks ''' 重启任务 RestartTasks ''' 重启所有任务 RestartAllTasks ''' 获取DataService版本信息 GetServiceVersion ''' 初始化APP,从服务端获取APP运行参数 InitApp ''' App上报状态至服务 AppMsg ''' 服务下发通知App ServiceMsg End Enum ''' ''' App上报时包含的类型 ''' Enum AppMsgTypes ''' ''' APP已启动 ''' AppStart ''' ''' APP已关闭 ''' AppClose ''' ''' APP站位切换 ''' StationChanged ''' ''' APP心跳包 ''' AppAlive ''' ''' Sn总表发生变化 ''' SnListChanged End Enum ''' ''' 服务下发时包含的类型 ''' Enum ServiceMsgTypes DbHostChange FtpHostChange End Enum Sub New() IsReply = False JsonFilter = True JsonFormat = Formatting.None TasksName = New List(Of String)() TasksInfo = New List(Of Dictionary(Of String, String)) AppInfo = New Dictionary(Of String, String) End Sub Sub New(reply As Boolean) IsReply = reply JsonFilter = True JsonFormat = Formatting.None TasksName = New List(Of String)() TasksInfo = New List(Of Dictionary(Of String, String)) AppInfo = New Dictionary(Of String, String) End Sub Sub New(cmd As CmdNamesEnum) IsReply = False JsonFilter = True JsonFormat = Formatting.None TasksName = New List(Of String)() TasksInfo = New List(Of Dictionary(Of String, String)) AppInfo = New Dictionary(Of String, String) CmdName = cmd End Sub Sub New(cmd As CmdNamesEnum, reply As Boolean) IsReply = reply JsonFilter = True JsonFormat = Formatting.None TasksName = New List(Of String)() TasksInfo = New List(Of Dictionary(Of String, String)) AppInfo = New Dictionary(Of String, String) CmdName = cmd End Sub Sub New(cmd As CmdNamesEnum, usr As String, app As String) IsReply = False JsonFilter = True JsonFormat = Formatting.None TasksName = New List(Of String)() TasksInfo = New List(Of Dictionary(Of String, String)) AppInfo = New Dictionary(Of String, String) CmdName = cmd User = usr AppName = app End Sub Sub New(cmd As CmdNamesEnum, usr As String, app As String, reply As Boolean) IsReply = reply JsonFilter = True JsonFormat = Formatting.None TasksName = New List(Of String)() TasksInfo = New List(Of Dictionary(Of String, String)) AppInfo = New Dictionary(Of String, String) CmdName = cmd User = usr AppName = app End Sub ''' ''' 序列化类中字段为Json字符串 ''' ''' Public Shared Function SerializeToJson(jsonParam As TaskJsonParam) As String If JsonFilter Then Dim jSetting As New JsonSerializerSettings jSetting.ContractResolver = FilterFiled(jsonParam.CmdName, jsonParam.IsReply) Return JsonConvert.SerializeObject(jsonParam, JsonFormat, jSetting) Else Return JsonConvert.SerializeObject(jsonParam, JsonFormat) End If End Function ''' ''' 反序列Json字符串填充当前类中 ''' ''' Public Shared Function DeserializeFormJson(jsonString As String) As TaskJsonParam Return JsonConvert.DeserializeObject(Of TaskJsonParam)(jsonString) End Function ''' ''' 根据任务名称,设置参与序列化的字段名称 ''' 增加任务名称时,需要更新该函数 ''' ''' ''' Private Shared Function FilterFiled(cmd As CmdNamesEnum, Optional isReply As Boolean = False) As TaskJsonSettings If isReply Then Return FilterReplyFiled(cmd) Else Return FilterSendFiled(cmd) End If End Function Private Shared Function FilterSendFiled(cmd As CmdNamesEnum) As TaskJsonSettings Dim lst As New List(Of String) lst.Add("User") lst.Add("AppName") lst.Add("CmdName") Select Case cmd Case CmdNamesEnum.AddTasks, CmdNamesEnum.SetTasks lst.Add("TasksInfo") Case CmdNamesEnum.DeleteTasks, CmdNamesEnum.GetTasks, CmdNamesEnum.StartTasks, CmdNamesEnum.StopTasks, CmdNamesEnum.RestartTasks lst.Add("TasksName") Case CmdNamesEnum.InitApp, CmdNamesEnum.AppMsg, CmdNamesEnum.ServiceMsg lst.Add("AppInfo") Case CmdNamesEnum.GetServiceVersion lst.Add("ServiceVersion") End Select Return New TaskJsonSettings(lst.ToArray()) End Function Private Shared Function FilterReplyFiled(cmd As CmdNamesEnum) As TaskJsonSettings Dim lst As New List(Of String) lst.Add("CmdName") lst.Add("CmdStatus") lst.Add("CmdMsg") Select Case cmd Case CmdNamesEnum.GetTasks lst.Add("TasksInfo") Case CmdNamesEnum.GetAllTasks lst.Add("TasksInfo") Case CmdNamesEnum.GetServiceVersion lst.Add("ServiceVersion") Case CmdNamesEnum.InitApp, CmdNamesEnum.AppMsg, CmdNamesEnum.ServiceMsg lst.Add("AppInfo") End Select Return New TaskJsonSettings(lst.ToArray()) End Function End Class End Namespace