Skip to content

Commit 953ad48

Browse files
committed
Only use special data converters when handling bundles. Otherwhise use default serializer options (adjusted for trim support)
1 parent c8f67ef commit 953ad48

10 files changed

Lines changed: 46 additions & 21 deletions

File tree

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-
SerializationHelpers.SerializingOptions
94+
SerializationHelpers.DefaultOptions
9595
);
9696
if (JsonData.icons_and_screenshots is not null)
9797
{

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, SerializationHelpers.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, SerializationHelpers.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+
private 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, SerializationHelpers.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), SerializationHelpers.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, SerializationHelpers.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, SerializationHelpers.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: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ 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"));
20+
var serialOptionsCount = lines.Count(x => x.Contains("CoreData.DefaultOptions"));
2121
Assert.True((jsonSerCount + jsonDeserCount) <= serialOptionsCount,
2222
$"Failing on {file}. The specified file does not serialize and/or deserialize JSON with" +
23-
$" the proper CoreData.SerializingOptions set");
23+
$" the proper CoreData.DefaultOptions set");
2424
}
2525
}
2626

src/UniGetUI.Core.Data/SerializationHelpers.cs renamed to src/UniGetUI.Core.Tools/SerializationHelpers.cs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ private static string xml_to_json(string XML)
2828
var doc = new XmlDocument();
2929
doc.LoadXml(XML);
3030
if (doc.DocumentElement is null) return "{'message': 'XmlDocument.DocumentElement was null'}";
31-
return JsonSerializer.Serialize(_convertXmlNode(doc.DocumentElement), SerializingOptions);
31+
return JsonSerializer.Serialize(_convertXmlNode(doc.DocumentElement), DefaultOptions);
3232
}
3333

3434
private static object? _convertXmlNode(XmlNode node)
@@ -78,16 +78,32 @@ private static string xml_to_json(string XML)
7878
return dict;
7979
}
8080

81-
public static JsonSerializerOptions SerializingOptions = new()
81+
public static JsonSerializerOptions DefaultOptions = new()
8282
{
8383
TypeInfoResolver = new DefaultJsonTypeInfoResolver(),
84-
NumberHandling = JsonNumberHandling.AllowNamedFloatingPointLiterals | JsonNumberHandling.AllowReadingFromString,
8584
AllowTrailingCommas = true,
8685
WriteIndented = true,
87-
Converters = { new FlexibleBooleanConverter(), new FlexibleStringConverter(), new FlexibleListStringConverter() }
8886
};
8987

90-
private class FlexibleBooleanConverter : JsonConverter<bool>
88+
public static JsonSerializerOptions ImportBundleOptions = new()
89+
{
90+
TypeInfoResolver = new DefaultJsonTypeInfoResolver(),
91+
NumberHandling =
92+
JsonNumberHandling.AllowNamedFloatingPointLiterals | JsonNumberHandling.AllowReadingFromString,
93+
AllowTrailingCommas = true,
94+
WriteIndented = true,
95+
Converters =
96+
{
97+
new Converters.FlexibleBooleanConverter(),
98+
new Converters.FlexibleStringConverter(),
99+
new Converters.FlexibleListStringConverter()
100+
}
101+
};
102+
}
103+
104+
internal class Converters
105+
{
106+
public class FlexibleBooleanConverter : JsonConverter<bool>
91107
{
92108
public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
93109
{
@@ -110,7 +126,7 @@ public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOpti
110126
}
111127
}
112128

113-
private class FlexibleStringConverter : JsonConverter<string>
129+
public class FlexibleStringConverter : JsonConverter<string>
114130
{
115131
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
116132
{
@@ -128,7 +144,7 @@ public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOp
128144
}
129145
}
130146

131-
private class FlexibleListStringConverter : JsonConverter<List<string>>
147+
public class FlexibleListStringConverter : JsonConverter<List<string>>
132148
{
133149
public override List<string> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
134150
{

src/UniGetUI.PackageEngine.Managers.Cargo/CratesIOClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ private static T Fetch<T>(Uri url)
9393

9494
var manifestStr = client.GetStringAsync(url).GetAwaiter().GetResult();
9595

96-
var manifest = JsonSerializer.Deserialize<T>(manifestStr, options: SerializationHelpers.SerializingOptions)
96+
var manifest = JsonSerializer.Deserialize<T>(manifestStr, options: SerializationHelpers.DefaultOptions)
9797
?? throw new NullResponseException($"Null response for request to {url}");
9898
return manifest;
9999
}

src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/InstallationOptions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ public void SaveToDisk()
201201

202202
string fileContents = JsonSerializer.Serialize(
203203
AsSerializable(),
204-
SerializationHelpers.SerializingOptions
204+
SerializationHelpers.DefaultOptions
205205
);
206206
File.WriteAllText(optionsFile.FullName, fileContents);
207207
}
@@ -227,7 +227,7 @@ public void LoadFromDisk()
227227

228228
using FileStream inputStream = optionsFile.OpenRead();
229229
SerializableInstallationOptions_v1? options = JsonSerializer.Deserialize<SerializableInstallationOptions_v1>(
230-
inputStream, SerializationHelpers.SerializingOptions);
230+
inputStream, SerializationHelpers.DefaultOptions);
231231

232232
if (options is null)
233233
{

src/UniGetUI/Pages/SoftwarePages/PackageBundlesPage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ static int Comparison(IPackage x, IPackage y)
608608
if (formatType is BundleFormatType.JSON or BundleFormatType.UBUNDLE)
609609
ExportableData = JsonSerializer.Serialize(
610610
exportable,
611-
SerializationHelpers.SerializingOptions);
611+
SerializationHelpers.DefaultOptions);
612612

613613
else if (formatType is BundleFormatType.YAML)
614614
{
@@ -651,7 +651,7 @@ public async Task<double> AddFromBundle(string content, BundleFormatType format)
651651
Logger.ImportantInfo("XML payload was converted to JSON dynamically before deserialization");
652652
}
653653

654-
DeserializedData = await Task.Run(() => JsonSerializer.Deserialize<SerializableBundle_v1>(content, SerializationHelpers.SerializingOptions));
654+
DeserializedData = await Task.Run(() => JsonSerializer.Deserialize<SerializableBundle_v1>(content, SerializationHelpers.ImportBundleOptions));
655655

656656

657657
if (DeserializedData is null || DeserializedData.export_version is -1)

0 commit comments

Comments
 (0)