Условная сериализация с Microsoft.AspNet.Odata - PullRequest
1 голос
/ 07 июня 2019

У нас есть требование скрывать определенные поля на основе прав пользователя при передаче данных клиентскому приложению.

Этот должен быть простым с использованием 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;
        }
    }
...