diff --git a/v2rayN/ServiceLib/Common/JsonUtils.cs b/v2rayN/ServiceLib/Common/JsonUtils.cs index 09b62dda..7d427f74 100644 --- a/v2rayN/ServiceLib/Common/JsonUtils.cs +++ b/v2rayN/ServiceLib/Common/JsonUtils.cs @@ -97,6 +97,30 @@ namespace ServiceLib.Common return result; } + /// + /// Serialize Object to Json string + /// + /// + /// + /// + public static string Serialize(object? obj, JsonSerializerOptions options) + { + var result = string.Empty; + try + { + if (obj == null) + { + return result; + } + result = JsonSerializer.Serialize(obj, options); + } + catch (Exception ex) + { + Logging.SaveLog(_tag, ex); + } + return result; + } + /// /// SerializeToNode /// diff --git a/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs b/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs index f931170d..54bc4049 100644 --- a/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/RoutingRuleSettingViewModel.cs @@ -2,6 +2,8 @@ using ReactiveUI; using ReactiveUI.Fody.Helpers; using System.Reactive; +using System.Text.Json; +using System.Text.Json.Serialization; namespace ServiceLib.ViewModels { @@ -189,7 +191,13 @@ namespace ServiceLib.ViewModels } if (lst.Count > 0) { - await _updateView?.Invoke(EViewAction.SetClipboardData, JsonUtils.Serialize(lst)); + var options = new JsonSerializerOptions + { + WriteIndented = true, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }; + await _updateView?.Invoke(EViewAction.SetClipboardData, JsonUtils.Serialize(lst, options)); } }