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));
}
}