У нас есть требование скрывать определенные поля на основе прав пользователя при передаче данных клиентскому приложению.
Этот должен быть простым с использованием Json.Net и его методов ShouldSerialize .... к сожалению, реализация OData от Microsoft, похоже, не использует Json.net в качестве своего внутреннего сериализатора. Я не привязан к использованию решения Json.net; это просто кажется наиболее вероятным кандидатом на успех.
Я пытался реализовать клиентский сериализатор для OData, но, похоже, единственные примеры, которые мне удалось найти, были сделаны несколько лет назад и уже не верны.
Мы используем новейшую версию пакета Microsoft.AspNet.Odata и не можем вернуться, поскольку используем большую часть новой функциональности.
Я играл с этим несколько дней, и, похоже, что-то вроде того, что у меня ниже, должно быть ответом, но мне пока не повезло.
public class NewtonsoftODataMediaTypeFormatter:ODataMediaTypeFormatter
{
public NewtonsoftODataMediaTypeFormatter(IEnumerable<ODataPayloadKind> payloadKinds)
: base(payloadKinds)
{
}
public override Task WriteToStreamAsync(
Type type,
object value,
Stream writeStream,
HttpContent content,
TransportContext transportContext,
CancellationToken cancellationToken)
{
using (StreamWriter writer = new StreamWriter(writeStream))
{
writer.Write(JsonConvert.SerializeObject(value));
}
return Task.CompletedTask;
}
}