Skip to content

Commit 114cf15

Browse files
sunnamed434claude
andcommitted
Replace Newtonsoft.Json with a cross-platform Json helper (STJ on net6.0+)
Add BitMono.Shared.Json: Serialize/Deserialize/LoadFile/SaveFile behind one API that uses the in-box System.Text.Json on net6.0+ and Newtonsoft.Json on net462/netstandard (a single self-contained DLL, no transitive deps). It tolerates // comments and trailing commas and binds case-insensitively, matching the prior Newtonsoft behavior on the config files. Plugins on any supported runtime (net462 ... net10) now get JSON without referencing a serializer themselves. - Replace SettingsLoader with the general Json helper; drop its dead LoadWithVariables/Save. - net6.0+ no longer pulls Newtonsoft; it is referenced only on the legacy TFMs. - ProtectionSetting: [JsonIgnore] via a conditional global-using alias; drop [JsonRequired] (net6.0 in-box STJ lacks it, a nameless entry just no-ops). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent b96a46d commit 114cf15

12 files changed

Lines changed: 88 additions & 84 deletions

File tree

src/BitMono.CLI/GlobalUsings.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
global using BitMono.Obfuscation.Files;
88
global using BitMono.Obfuscation.Starter;
99
global using BitMono.Shared;
10-
global using BitMono.Shared.Configuration;
1110
global using BitMono.Shared.DependencyInjection;
1211
global using BitMono.Shared.Logging;
1312
global using BitMono.Shared.Models;

src/BitMono.CLI/Modules/OptionsObfuscationNeedsFactory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,19 @@ public OptionsObfuscationNeedsFactory(string[] args)
2929
{
3030
if (options.ObfuscationFile != null && File.Exists(options.ObfuscationFile))
3131
{
32-
obfuscationSettings = SettingsLoader.Load<ObfuscationSettings>(options.ObfuscationFile);
32+
obfuscationSettings = Json.LoadFile<ObfuscationSettings>(options.ObfuscationFile);
3333
}
3434
else if (File.Exists(KnownConfigNames.Obfuscation))
3535
{
36-
obfuscationSettings = SettingsLoader.Load<ObfuscationSettings>(KnownConfigNames.Obfuscation);
36+
obfuscationSettings = Json.LoadFile<ObfuscationSettings>(KnownConfigNames.Obfuscation);
3737
}
3838
else
3939
{
4040
// Fallback to application base directory
4141
var baseObfuscationFile = Path.Combine(AppContext.BaseDirectory, KnownConfigNames.Obfuscation);
4242
if (File.Exists(baseObfuscationFile))
4343
{
44-
obfuscationSettings = SettingsLoader.Load<ObfuscationSettings>(baseObfuscationFile);
44+
obfuscationSettings = Json.LoadFile<ObfuscationSettings>(baseObfuscationFile);
4545
}
4646
}
4747

src/BitMono.CLI/Modules/ReadlineObfuscationNeedsFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ public ObfuscationNeeds Create(CancellationToken cancellationToken)
3636
{
3737
if (File.Exists(obfuscationFile ?? KnownConfigNames.Obfuscation))
3838
{
39-
obfuscationSettings = SettingsLoader.Load<ObfuscationSettings>(obfuscationFile ?? KnownConfigNames.Obfuscation);
39+
obfuscationSettings = Json.LoadFile<ObfuscationSettings>(obfuscationFile ?? KnownConfigNames.Obfuscation);
4040
}
4141

4242
if (File.Exists(KnownConfigNames.Protections))
4343
{
44-
var loadedSettings = SettingsLoader.Load<ProtectionSettings>(KnownConfigNames.Protections);
44+
var loadedSettings = Json.LoadFile<ProtectionSettings>(KnownConfigNames.Protections);
4545
protectionSettings = loadedSettings?.Protections;
4646
}
4747

src/BitMono.Core/GlobalUsings.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
global using Echo.DataFlow.Analysis;
2828
global using Echo.Platforms.AsmResolver;
2929
global using JetBrains.Annotations;
30-
global using Newtonsoft.Json;
3130
global using BitMono.Shared.Extensions;
3231
global using System;
3332
global using System.Collections.Generic;

src/BitMono.GlobalTool/GlobalUsings.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
global using BitMono.Obfuscation.Files;
99
global using BitMono.Obfuscation.Starter;
1010
global using BitMono.Shared;
11-
global using BitMono.Shared.Configuration;
1211
global using BitMono.Shared.DependencyInjection;
1312
global using BitMono.Shared.Logging;
1413
global using BitMono.Shared.Models;

src/BitMono.Host/GlobalUsings.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
global using BitMono.Core.Services;
1010
global using BitMono.Host.Ioc;
1111
global using BitMono.Shared;
12-
global using BitMono.Shared.Configuration;
1312
global using BitMono.Shared.DependencyInjection;
1413
global using BitMono.Shared.Logging;
1514
global using BitMono.Shared.Models;

src/BitMono.Host/Modules/BitMonoModule.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using BitMono.Core.Renaming;
66
using BitMono.Core.Services;
77
using BitMono.Host.Ioc;
8-
using BitMono.Shared.Configuration;
98
using BitMono.Shared.DependencyInjection;
109
using BitMono.Shared.Logging;
1110
using BitMono.Shared.Models;
@@ -63,16 +62,16 @@ public void Load(Container container)
6362
var logger = new Logger(loggerConfiguration);
6463
container.Register<ILogger>(logger).AsSingleton();
6564

66-
var criticalsSettings = SettingsLoader.Load<CriticalsSettings>(
65+
var criticalsSettings = Json.LoadFile<CriticalsSettings>(
6766
_criticalsFile ?? KnownConfigNames.Criticals);
6867
container.Register(criticalsSettings).AsSingleton();
6968

7069
var obfuscationSettings = _obfuscationSettings ??
71-
SettingsLoader.Load<ObfuscationSettings>(_obfuscationFile ?? KnownConfigNames.Obfuscation);
70+
Json.LoadFile<ObfuscationSettings>(_obfuscationFile ?? KnownConfigNames.Obfuscation);
7271
container.Register(obfuscationSettings).AsSingleton();
7372

7473
var protectionSettings = _protectionSettings ??
75-
SettingsLoader.Load<ProtectionSettings>(_protectionsFile ?? KnownConfigNames.Protections);
74+
Json.LoadFile<ProtectionSettings>(_protectionsFile ?? KnownConfigNames.Protections);
7675
container.Register(protectionSettings).AsSingleton();
7776

7877
container.Register<IEngineContextAccessor, EngineContextAccessor>().AsSingleton();

src/BitMono.Shared/BitMono.Shared.csproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@
99
<!-- Common Packages for all frameworks -->
1010
<ItemGroup>
1111
<PackageReference Include="NullGuard.Fody" Version="3.1.1" PrivateAssets="All" />
12-
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
1312
<PackageReference Include="morelinq" Version="4.4.0" />
1413
</ItemGroup>
1514

15+
<!-- JSON: System.Text.Json is in-box on net6.0+, so we add nothing there. The legacy TFMs keep
16+
Newtonsoft.Json (a single self-contained DLL, no transitive deps) via the Json helper's #if. -->
17+
<ItemGroup Condition=" '$(TargetFramework)' == 'net462' or '$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'netstandard2.1' ">
18+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
19+
</ItemGroup>
20+
1621
<!-- Packages specific to older frameworks that need polyfills -->
1722
<ItemGroup Condition=" '$(TargetFramework)' == 'net462' ">
1823
<PackageReference Include="System.Collections.Immutable" Version="1.7.1" />

src/BitMono.Shared/Configuration/SettingsLoader.cs

Lines changed: 0 additions & 68 deletions
This file was deleted.

src/BitMono.Shared/GlobalUsings.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
global using System.IO;
44
global using System.Linq;
55
global using System.Threading;
6-
global using Newtonsoft.Json;
6+
#if NET6_0_OR_GREATER
7+
global using JsonIgnoreAttribute = System.Text.Json.Serialization.JsonIgnoreAttribute;
8+
#else
9+
global using JsonIgnoreAttribute = Newtonsoft.Json.JsonIgnoreAttribute;
10+
#endif
711
global using NullGuard;
812
global using BitMono.Shared.Extensions;

0 commit comments

Comments
 (0)