Fix PPtrConverter (#69)

This commit is contained in:
VaDiM 2025-03-04 04:05:22 +03:00
parent 9f918d0332
commit db4eb30a27
2 changed files with 5 additions and 12 deletions

View File

@ -526,7 +526,7 @@ namespace AssetStudio
Progress.Reset(); Progress.Reset();
foreach (var assetsFile in assetsFileList) foreach (var assetsFile in assetsFileList)
{ {
JsonConverterHelper.PPtrConverter.AssetsFile = assetsFile; JsonConverterHelper.AssetsFile = assetsFile;
foreach (var objectInfo in assetsFile.m_Objects) foreach (var objectInfo in assetsFile.m_Objects)
{ {
var objectReader = new ObjectReader(assetsFile.reader, assetsFile, objectInfo); var objectReader = new ObjectReader(assetsFile.reader, assetsFile, objectInfo);

View File

@ -6,10 +6,10 @@ namespace AssetStudio
{ {
public static partial class JsonConverterHelper public static partial class JsonConverterHelper
{ {
public static SerializedFile AssetsFile { get; set; }
public class PPtrConverter : JsonConverterFactory public class PPtrConverter : JsonConverterFactory
{ {
public static SerializedFile AssetsFile;
public override bool CanConvert(Type typeToConvert) public override bool CanConvert(Type typeToConvert)
{ {
if (!typeToConvert.IsGenericType) if (!typeToConvert.IsGenericType)
@ -22,24 +22,17 @@ namespace AssetStudio
public override JsonConverter CreateConverter(Type type, JsonSerializerOptions options) public override JsonConverter CreateConverter(Type type, JsonSerializerOptions options)
{ {
var elementType = type.GetGenericArguments()[0]; var elementType = type.GetGenericArguments()[0];
var converter = (JsonConverter)Activator.CreateInstance(typeof(PPtrConverter<>).MakeGenericType(elementType), AssetsFile); var converter = (JsonConverter)Activator.CreateInstance(typeof(PPtrConverter<>).MakeGenericType(elementType));
return converter; return converter;
} }
} }
private class PPtrConverter<T> : JsonConverter<PPtr<T>> where T : Object private class PPtrConverter<T> : JsonConverter<PPtr<T>> where T : Object
{ {
private readonly SerializedFile _assetsFile;
public PPtrConverter(SerializedFile assetsFile)
{
_assetsFile = assetsFile;
}
public override PPtr<T> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) public override PPtr<T> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{ {
var pptrObj = JsonSerializer.Deserialize<PPtr<T>>(ref reader, new JsonSerializerOptions { IncludeFields = true }); var pptrObj = JsonSerializer.Deserialize<PPtr<T>>(ref reader, new JsonSerializerOptions { IncludeFields = true });
pptrObj.AssetsFile = _assetsFile; pptrObj.AssetsFile = AssetsFile;
return pptrObj; return pptrObj;
} }