Skip to content

Commit

Permalink
add ByteArrayJsonConverter, MetadataPropertyHandling.ReadAhead
Browse files Browse the repository at this point in the history
  • Loading branch information
atenfyr committed Jan 15, 2025
1 parent 515221b commit 1d0026d
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 0 deletions.
51 changes: 51 additions & 0 deletions UAssetAPI/JSON/ByteArrayJsonConverter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace UAssetAPI.JSON
{
public class ByteArrayJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(byte[]);
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(Convert.ToBase64String((byte[])value));
}

public override bool CanRead
{
get { return true; }
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
string val = reader.Value as string;

// backwards compatibility for fun
if (reader.TokenType == JsonToken.StartObject)
{
reader.Read();
while (reader.TokenType != JsonToken.EndObject)
{
if (reader.TokenType != JsonToken.PropertyName) throw new FormatException("Expected PropertyName, got " + reader.TokenType);
string propertyName = reader.Value.ToString();
reader.Read();
object propertyValue = reader.Value;
reader.Read();

if (propertyName == "$value")
{
val = propertyValue as string;
}
}
}

if (val == null) return null;
return Convert.FromBase64String(val);
}
}
}
8 changes: 8 additions & 0 deletions UAssetAPI/UAsset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1011,6 +1011,7 @@ public void ConvertExportToChildExportAndRead(AssetBinaryReader reader, int i, b
NullValueHandling = NullValueHandling.Include,
FloatParseHandling = FloatParseHandling.Double,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,
ContractResolver = new UAssetContractResolver(null),
Converters = new List<JsonConverter>()
{
Expand All @@ -1021,6 +1022,7 @@ public void ConvertExportToChildExportAndRead(AssetBinaryReader reader, int i, b
new FPackageIndexJsonConverter(),
new StringEnumConverter(),
new GuidJsonConverter(),
new ByteArrayJsonConverter()
}
};

Expand Down Expand Up @@ -2751,6 +2753,7 @@ public T DeserializeJsonObject<T>(string json)
NullValueHandling = NullValueHandling.Include,
FloatParseHandling = FloatParseHandling.Double,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,
ContractResolver = new UAssetContractResolver(toBeFilled),
Converters = new List<JsonConverter>()
{
Expand All @@ -2761,6 +2764,7 @@ public T DeserializeJsonObject<T>(string json)
new FPackageIndexJsonConverter(),
new StringEnumConverter(),
new GuidJsonConverter(),
new ByteArrayJsonConverter()
}
});

Expand Down Expand Up @@ -2797,6 +2801,7 @@ public static UAsset DeserializeJson(string json)
NullValueHandling = NullValueHandling.Include,
FloatParseHandling = FloatParseHandling.Double,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,
ContractResolver = new UAssetContractResolver(toBeFilled),
Converters = new List<JsonConverter>()
{
Expand All @@ -2807,6 +2812,7 @@ public static UAsset DeserializeJson(string json)
new FPackageIndexJsonConverter(),
new StringEnumConverter(),
new GuidJsonConverter(),
new ByteArrayJsonConverter()
}
});

Expand Down Expand Up @@ -2846,6 +2852,7 @@ public static UAsset DeserializeJson(Stream stream)
NullValueHandling = NullValueHandling.Include,
FloatParseHandling = FloatParseHandling.Double,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead,
ContractResolver = new UAssetContractResolver(toBeFilled),
Converters = new List<JsonConverter>()
{
Expand All @@ -2856,6 +2863,7 @@ public static UAsset DeserializeJson(Stream stream)
new FPackageIndexJsonConverter(),
new StringEnumConverter(),
new GuidJsonConverter(),
new ByteArrayJsonConverter()
}
});

Expand Down

0 comments on commit 1d0026d

Please sign in to comment.