Skip to content

Commit 6320d67

Browse files
authored
Merge pull request #3679 from marticliment/dynamic-json-{de}serialization
2 parents cbf3332 + af77401 commit 6320d67

39 files changed

Lines changed: 1071 additions & 204 deletions

src/UniGetUI.Core.Classes.Tests/UniGetUI.Core.Classes.Tests.csproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

3-
4-
53
<PropertyGroup>
64
<IsPackable>false</IsPackable>
75
<IsTestProject>true</IsTestProject>

src/UniGetUI.Core.Data/CoreData.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Diagnostics;
22
using System.Text.Json;
3+
using System.Text.Json.Serialization;
34
using System.Text.Json.Serialization.Metadata;
45
using UniGetUI.Core.Logging;
56

@@ -357,12 +358,6 @@ private static string GetNewDataDirectoryOrMoveOld(string old_path, string new_p
357358
}
358359
}
359360

360-
public static JsonSerializerOptions SerializingOptions = new()
361-
{
362-
TypeInfoResolverChain = { new DefaultJsonTypeInfoResolver() },
363-
WriteIndented = true,
364-
};
365-
366361
private static int GetCodePage()
367362
{
368363
try

src/UniGetUI.Core.Data/UniGetUI.Core.Data.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,8 @@
1515
<ItemGroup>
1616
<Compile Include="..\SharedAssemblyInfo.cs" Link="SharedAssemblyInfo.cs" />
1717
</ItemGroup>
18+
19+
<ItemGroup>
20+
<PackageReference Include="YamlDotNet" Version="16.3.0" />
21+
</ItemGroup>
1822
</Project>

src/UniGetUI.Core.IconStore/IconDatabase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public async Task LoadIconAndScreenshotsDatabaseAsync()
9191
{
9292
IconScreenshotDatabase_v2 JsonData = JsonSerializer.Deserialize<IconScreenshotDatabase_v2>(
9393
await File.ReadAllTextAsync(IconsAndScreenshotsFile),
94-
CoreData.SerializingOptions
94+
SerializationHelpers.DefaultOptions
9595
);
9696
if (JsonData.icons_and_screenshots is not null)
9797
{

src/UniGetUI.Core.Settings.Tests/SettingsTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public void TestListSettings(string SettingName, string[] ls1Array, int[] ls2Arr
173173
Assert.Equal("this is now a test case", Settings.GetListItem<string>(SettingName, 3));
174174
Assert.Null(Settings.GetListItem<string>(SettingName, 4));
175175

176-
Assert.Equal(Settings.GetListItem<string>(SettingName, 0), JsonSerializer.Deserialize<List<string>>(File.ReadAllText(Path.Join(CoreData.UniGetUIUserConfigurationDirectory, $"{SettingName}.json")), CoreData.SerializingOptions)[0]);
176+
Assert.Equal(Settings.GetListItem<string>(SettingName, 0), JsonSerializer.Deserialize<List<string>>(File.ReadAllText(Path.Join(CoreData.UniGetUIUserConfigurationDirectory, $"{SettingName}.json")), Settings.SerializationOptions)[0]);
177177
Settings.ClearList(SettingName);
178178
Assert.Empty(Settings.GetList<object>(SettingName) ?? ["this shouldn't be null; something's wrong"]);
179179

@@ -226,7 +226,7 @@ public void TestDictionarySettings(string SettingName, string[] keyArray, int[]
226226
Settings.SetDictionaryItem(randStr, "key", 12);
227227
Assert.Equal(12, Settings.GetDictionaryItem<string, int>(randStr, "key"));
228228
Settings.SetDictionary(SettingName, test);
229-
Assert.Equal(JsonSerializer.Serialize(test, CoreData.SerializingOptions), File.ReadAllText(Path.Join(CoreData.UniGetUIUserConfigurationDirectory, $"{SettingName}.json")));
229+
Assert.Equal(JsonSerializer.Serialize(test, Settings.SerializationOptions), File.ReadAllText(Path.Join(CoreData.UniGetUIUserConfigurationDirectory, $"{SettingName}.json")));
230230
Assert.Equal(test[keyArray[0]]?.sub.count, Settings.GetDictionary<string, SerializableTest?>(SettingName)?[keyArray[0]]?.sub.count);
231231
Assert.Equal(test[keyArray[1]]?.sub.count, Settings.GetDictionaryItem<string, SerializableTest?>(SettingName, keyArray[1])?.sub.count);
232232
Settings.SetDictionaryItem(SettingName, keyArray[0], test[keyArray[1]]);
@@ -257,7 +257,7 @@ public void TestDictionarySettings(string SettingName, string[] keyArray, int[]
257257
Assert.True(Settings.DictionaryContainsValue<string, SerializableTest?>(SettingName, test[keyArray[2]]));
258258

259259
Assert.Equal(
260-
JsonSerializer.Serialize(Settings.GetDictionary<string, SerializableTest>(SettingName), CoreData.SerializingOptions),
260+
JsonSerializer.Serialize(Settings.GetDictionary<string, SerializableTest>(SettingName), Settings.SerializationOptions),
261261
File.ReadAllText(Path.Join(CoreData.UniGetUIUserConfigurationDirectory, $"{SettingName}.json"))
262262
);
263263

src/UniGetUI.Core.Settings/SettingsEngine_Dictionaries.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public static partial class Settings
4343
if (result != "")
4444
{
4545

46-
Dictionary<K, V?>? item = JsonSerializer.Deserialize<Dictionary<K, V?>>(result, CoreData.SerializingOptions);
46+
Dictionary<K, V?>? item = JsonSerializer.Deserialize<Dictionary<K, V?>>(result, SerializationOptions);
4747
if (item is not null)
4848
{
4949
value = item;
@@ -90,7 +90,7 @@ public static void SetDictionary<K, V>(string setting, Dictionary<K, V> value)
9090
try
9191
{
9292

93-
if (value.Count != 0) File.WriteAllText(file, JsonSerializer.Serialize(value, CoreData.SerializingOptions));
93+
if (value.Count != 0) File.WriteAllText(file, JsonSerializer.Serialize(value, SerializationOptions));
9494
else if (File.Exists(file)) File.Delete(file);
9595
}
9696
catch (Exception e)

src/UniGetUI.Core.Settings/SettingsEngine_Extras.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System.Net;
2+
using System.Text.Json;
3+
using System.Text.Json.Serialization.Metadata;
24
using Windows.Security.Credentials;
35
using UniGetUI.Core.Logging;
46

@@ -83,4 +85,11 @@ public static void SetProxyCredentials(string username, string password)
8385
Logger.Error(ex);
8486
}
8587
}
88+
89+
public static JsonSerializerOptions SerializationOptions = new()
90+
{
91+
TypeInfoResolver = new DefaultJsonTypeInfoResolver(),
92+
AllowTrailingCommas = true,
93+
WriteIndented = true,
94+
};
8695
}

src/UniGetUI.Core.Settings/SettingsEngine_ImportExport.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public static void ExportToJSON(string path)
1717
settings.Add(Path.GetFileName(entry), File.ReadAllText(entry));
1818
}
1919

20-
File.WriteAllText(path, JsonSerializer.Serialize(settings, CoreData.SerializingOptions));
20+
File.WriteAllText(path, JsonSerializer.Serialize(settings, SerializationOptions));
2121
}
2222

2323
public static void ImportFromJSON(string path)
@@ -31,7 +31,7 @@ public static void ImportFromJSON(string path)
3131
}
3232

3333
ResetSettings();
34-
Dictionary<string, string> settings = JsonSerializer.Deserialize<Dictionary<string, string>>(File.ReadAllText(path), CoreData.SerializingOptions) ?? [];
34+
Dictionary<string, string> settings = JsonSerializer.Deserialize<Dictionary<string, string>>(File.ReadAllText(path), SerializationOptions) ?? [];
3535
foreach (KeyValuePair<string, string> entry in settings)
3636
{
3737
if(new[] {"OperationHistory", "WinGetAlreadyUpgradedPackages.json", "TelemetryClientToken", "CurrentSessionToken"}.Contains(entry.Key))

src/UniGetUI.Core.Settings/SettingsEngine_Lists.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static partial class Settings
3939
{
4040
if (result != "")
4141
{
42-
List<T>? item = JsonSerializer.Deserialize<List<T>>(result, CoreData.SerializingOptions);
42+
List<T>? item = JsonSerializer.Deserialize<List<T>>(result, SerializationOptions);
4343
if (item is not null)
4444
{
4545
value = item;
@@ -76,7 +76,7 @@ public static void SetList<T>(string setting, List<T> value)
7676
var file = Path.Join(CoreData.UniGetUIUserConfigurationDirectory, $"{setting}.json");
7777
try
7878
{
79-
if (value.Count != 0) File.WriteAllText(file, JsonSerializer.Serialize(value, CoreData.SerializingOptions));
79+
if (value.Count != 0) File.WriteAllText(file, JsonSerializer.Serialize(value, SerializationOptions));
8080
else if (File.Exists(file)) File.Delete(file);
8181
}
8282
catch (Exception e)

src/UniGetUI.Core.Tools.Tests/MetaTests.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ public void TestJsonSerializationOptions()
1717
var lines = File.ReadAllLines(file);
1818
var jsonSerCount = lines.Count(x => x.Contains("JsonSerializer.Serialize"));
1919
var jsonDeserCount = lines.Count(x => x.Contains("JsonSerializer.Deserialize"));
20-
var serialOptionsCount = lines.Count(x => x.Contains("CoreData.SerializingOptions"));
21-
Assert.True((jsonSerCount + jsonDeserCount) <= serialOptionsCount,
20+
var serialOptionsCount1 = lines.Count(x => x.Contains("SerializationHelpers.DefaultOptions"));
21+
var serialOptionsCount2 = lines.Count(x => x.Contains("SerializationHelpers.ImportBundleOptions"));
22+
var serialOptionsCount3 = lines.Count(x => x.Contains("SerializationOptions"));
23+
Assert.True((jsonSerCount + jsonDeserCount) <= serialOptionsCount1 + serialOptionsCount2 + serialOptionsCount3,
2224
$"Failing on {file}. The specified file does not serialize and/or deserialize JSON with" +
23-
$" the proper CoreData.SerializingOptions set");
25+
$" the proper CoreData.DefaultOptions set");
2426
}
2527
}
2628

0 commit comments

Comments
 (0)