mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Add loadable fields handling on system.text.json serializer
This commit is contained in:
parent
ec6b90b33c
commit
d62bdfc637
@ -95,8 +95,11 @@ namespace Kyoo.Core
|
||||
})
|
||||
.AddJsonOptions(x =>
|
||||
{
|
||||
x.JsonSerializerOptions.TypeInfoResolver = new WithKindResolver()
|
||||
{
|
||||
Modifiers = { WithKindResolver.HandleLoadableFields }
|
||||
};
|
||||
x.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
|
||||
x.JsonSerializerOptions.TypeInfoResolver = new WithKindResolver();
|
||||
x.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
|
||||
})
|
||||
.AddDataAnnotations()
|
||||
|
@ -18,10 +18,13 @@
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization.Metadata;
|
||||
using Kyoo.Abstractions.Models;
|
||||
using Kyoo.Abstractions.Models.Attributes;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using static System.Text.Json.JsonNamingPolicy;
|
||||
|
||||
namespace Kyoo.Core.Api;
|
||||
@ -53,4 +56,24 @@ public class WithKindResolver : DefaultJsonTypeInfoResolver
|
||||
|
||||
return jsonTypeInfo;
|
||||
}
|
||||
|
||||
private static readonly IHttpContextAccessor _accessor = new HttpContextAccessor();
|
||||
|
||||
public static void HandleLoadableFields(JsonTypeInfo info)
|
||||
{
|
||||
foreach (JsonPropertyInfo prop in info.Properties)
|
||||
{
|
||||
object[] attributes =
|
||||
prop.AttributeProvider?.GetCustomAttributes(typeof(LoadableRelationAttribute), true)
|
||||
?? Array.Empty<object>();
|
||||
if (attributes.FirstOrDefault() is not LoadableRelationAttribute relation)
|
||||
continue;
|
||||
prop.ShouldSerialize = (_, _) =>
|
||||
{
|
||||
if (_accessor?.HttpContext?.Items["fields"] is not ICollection<string> fields)
|
||||
return false;
|
||||
return fields.Contains(prop.Name, StringComparer.InvariantCultureIgnoreCase);
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user