Use source generated json serializer contexts in the tools

This commit is contained in:
Jeremy Pritts 2023-10-25 23:47:25 -04:00
parent 26c68441f6
commit 401c7fe6c3
8 changed files with 45 additions and 7 deletions

View File

@ -0,0 +1,10 @@
using AssetRipper.IO.Files.SourceGenerator.Json;
using System.Text.Json.Serialization;
namespace AssetRipper.IO.Files.SourceGenerator;
[JsonSerializable(typeof(TypeDeclaration))]
[JsonSerializable(typeof(TypeDefinition))]
internal partial class InternalSerializerContext : JsonSerializerContext
{
}

View File

@ -55,11 +55,11 @@ namespace AssetRipper.IO.Files.SourceGenerator
string text = File.ReadAllText(fileInfo.FullName);
if (fileInfo.Name == declarationFileName)
{
declaration = JsonSerializer.Deserialize<TypeDeclaration>(text);
declaration = JsonSerializer.Deserialize(text, InternalSerializerContext.Default.TypeDeclaration);
}
else
{
TypeDefinition definition = JsonSerializer.Deserialize<TypeDefinition>(text) ?? throw new NullReferenceException();
TypeDefinition definition = JsonSerializer.Deserialize(text, InternalSerializerContext.Default.TypeDefinition) ?? throw new NullReferenceException();
if (definition.Version == -1)
{
if (versionIndependent is null)

View File

@ -0,0 +1,9 @@
using System.Text.Json.Serialization;
namespace AssetRipper.Tools.CabMapGenerator;
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Dictionary<string, string>))]
internal partial class DictionarySerializerContext : JsonSerializerContext
{
}

View File

@ -35,7 +35,7 @@ namespace AssetRipper.Tools.CabMapGenerator
using FileStream stream = File.Create(outputFile);
Dictionary<string, string> map = new();
LoadFiles(GetAllFilePaths(filesToExport), map);
JsonSerializer.Serialize(stream, map, new JsonSerializerOptions() { WriteIndented = true });
JsonSerializer.Serialize(stream, map, DictionarySerializerContext.Default.DictionaryStringString);
Console.WriteLine("Done!");
},
filesToExportOption, outputOption);

View File

@ -0,0 +1,9 @@
using System.Text.Json.Serialization;
namespace AssetRipper.Tools.DependenceGrapher;
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Dictionary<string, string>))]
internal partial class DictionarySerializerContext : JsonSerializerContext
{
}

View File

@ -86,7 +86,7 @@ namespace AssetRipper.Tools.DependenceGrapher
if (File.Exists(cabMapPath))
{
using FileStream cabMapStream = File.OpenRead(cabMapPath);
cabMap = JsonSerializer.Deserialize<Dictionary<string, string>>(cabMapPath) ?? new();
cabMap = JsonSerializer.Deserialize(cabMapPath, DictionarySerializerContext.Default.DictionaryStringString) ?? new();
}
else
{

View File

@ -0,0 +1,10 @@
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
namespace AssetRipper.Tools.JsonSerializer;
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(JsonObject))]
internal partial class JsonObjectSerializerContext : JsonSerializerContext
{
}

View File

@ -43,7 +43,7 @@ internal static class Program
try
#endif
{
var file = SchemeReader.LoadFile(fullName);
FileBase file = SchemeReader.LoadFile(fullName);
if (file is SerializedFile serializedFile)
{
ExtractJson(serializedFile);
@ -88,7 +88,7 @@ internal static class Program
foreach ((_, IUnityObjectBase asset) in collection.Assets)
{
JsonObject assetObject = new();
array.Add(assetObject);
array.Add((JsonNode)assetObject);
assetObject.Add("PathID", asset.PathID);
assetObject.Add("ClassID", asset.ClassID);
assetObject.Add("Fields", ((JsonAsset)asset).Contents);
@ -96,6 +96,6 @@ internal static class Program
//Normally, this would be a cause for concern, but the asset won't be used after this.
}
using FileStream stream = File.Create(Path.Combine(outputDirectory, $"{file.NameFixed}.json"));
System.Text.Json.JsonSerializer.Serialize(stream, root, new JsonSerializerOptions() { WriteIndented = true });
System.Text.Json.JsonSerializer.Serialize(stream, root, JsonObjectSerializerContext.Default.JsonObject);
}
}