[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) if (reader.TokenType == JsonToken.StartArray)
{ {
var obj = JArray.Load(reader); var obj = JArray.Load(reader);
var valueList = obj.ToObject<List<LDValueObject<object?>>>();
if (valueList is { Count: > 0 }) try
return VC.HandleObject(valueList[0], objectType); {
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?>>(); var list = obj.ToObject<List<ASCollection?>>();
return list == null || list.Count == 0 ? null : list[0]; return list == null || list.Count == 0 ? null : list[0];
} }
if (reader.TokenType == JsonToken.StartObject) if (reader.TokenType == JsonToken.StartObject)
{ {
var obj = JObject.Load(reader); var obj = JObject.Load(reader);
var valueObj = obj.ToObject<LDValueObject<object?>>(); try
return valueObj != null ? VC.HandleObject(valueObj, objectType) : obj.ToObject<ASCollection?>(); {
var valueObj = obj.ToObject<LDValueObject<object?>>();
if (valueObj != null)
return VC.HandleObject(valueObj, objectType);
}
catch
{
// ignored
}
return obj.ToObject<ASCollection?>();
} }
return null; return null;

View file

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