[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

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

View file

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