[backend/federation] Improve parsing of ASCollection & ASOrderedCollection

This commit is contained in:
Laura Hausmann 2024-03-04 23:34:10 +01:00
parent e59526592c
commit 8c20be0d95
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
2 changed files with 48 additions and 16 deletions

View file

@ -58,9 +58,18 @@ public sealed class ASCollectionConverter : JsonConverter
if (reader.TokenType == JsonToken.StartArray) if (reader.TokenType == JsonToken.StartArray)
{ {
var obj = JArray.Load(reader); var obj = JArray.Load(reader);
try
{
var valueList = obj.ToObject<List<LDValueObject<object?>>>(); var valueList = obj.ToObject<List<LDValueObject<object?>>>();
if (valueList is { Count: > 0 }) if (valueList is { Count: > 0 })
return VC.HandleObject(valueList[0], objectType); return VC.HandleObject(valueList[0], objectType);
}
catch
{
// ignored
}
var list = obj.ToObject<List<ASCollection?>>(); var list = obj.ToObject<List<ASCollection?>>();
return list == null || list.Count == 0 ? null : list[0]; return list == null || list.Count == 0 ? null : list[0];
} }
@ -68,8 +77,18 @@ public sealed class ASCollectionConverter : JsonConverter
if (reader.TokenType == JsonToken.StartObject) if (reader.TokenType == JsonToken.StartObject)
{ {
var obj = JObject.Load(reader); var obj = JObject.Load(reader);
try
{
var valueObj = obj.ToObject<LDValueObject<object?>>(); var valueObj = obj.ToObject<LDValueObject<object?>>();
return valueObj != null ? VC.HandleObject(valueObj, objectType) : obj.ToObject<ASCollection?>(); if (valueObj != null)
return VC.HandleObject(valueObj, objectType);
}
catch
{
// ignored
}
return obj.ToObject<ASCollection?>();
} }
return null; return null;

View file

@ -62,9 +62,17 @@ public sealed class ASOrderedCollectionConverter : JsonConverter
if (reader.TokenType == JsonToken.StartArray) if (reader.TokenType == JsonToken.StartArray)
{ {
var obj = JArray.Load(reader); var obj = JArray.Load(reader);
try
{
var valueList = obj.ToObject<List<LDValueObject<object?>>>(); var valueList = obj.ToObject<List<LDValueObject<object?>>>();
if (valueList?.Any(p => p.Value != null) ?? false) if (valueList?.Any(p => p.Value != null) ?? false)
return ValueObjectConverter.HandleObject(valueList[0], objectType); return ValueObjectConverter.HandleObject(valueList[0], objectType);
}
catch
{
//ignored
}
var list = obj.ToObject<List<ASOrderedCollection?>>(); var list = obj.ToObject<List<ASOrderedCollection?>>();
return list == null || list.Count == 0 ? null : list[0]; return list == null || list.Count == 0 ? null : list[0];
} }
@ -72,10 +80,15 @@ public sealed class ASOrderedCollectionConverter : JsonConverter
if (reader.TokenType == JsonToken.StartObject) if (reader.TokenType == JsonToken.StartObject)
{ {
var obj = JObject.Load(reader); var obj = JObject.Load(reader);
try { }
catch
{
var valueObj = obj.ToObject<LDValueObject<object?>>(); var valueObj = obj.ToObject<LDValueObject<object?>>();
return valueObj is { Value: not null } if (valueObj is { Value: not null })
? ValueObjectConverter.HandleObject(valueObj, objectType) return ValueObjectConverter.HandleObject(valueObj, objectType);
: obj.ToObject<ASOrderedCollection?>(); }
return obj.ToObject<ASOrderedCollection?>();
} }
return null; return null;