Serilog: Встроенная поддержка динамических объектов JSON.NET (JObject)

Созданный на 2 мая 2013  ·  13Комментарии  ·  Источник: serilog/serilog

В Твиттере вы упомянули, что это должно быть довольно просто реализовать через IDestructuringPolicy.
;)

enhancement

Самый полезный комментарий

Все 13 Комментарий

Я пытался заставить это работать через IDestructuringPolicy но, боюсь, это не сработает.

Беглый просмотр базы кода, кажется, указывает (здесь https://github.com/serilog/serilog/blob/master/src/Serilog/Parameters/PropertyValueConverter.cs?source=c#L112), что сначала PropertyValueConverter обрабатывает объекты как коллекцию (все JToken равны IEnumerable ) и поэтому никогда не проверяет с помощью IDestructuringPolicy .

Я _ думаю_, что, возможно, придание IDestructuringPolicy более высокого приоритета (сначала проверка с ним, а затем возврат к поведению по умолчанию) могло бы предложить выход, но, возможно, я совершенно ошибаюсь, я только 2 минуты смотрел на это код.

На данный момент я создал быстрое обходное решение, ... добавив уровень косвенности.

Я добавил класс с именем JObjectWrapper который не является IEnumerable и обернул им свой JObject . Теперь мой IDestructuringPolicy получил колл, и мир снова стал счастливым местом.

@kkozmic, как у этого дела? Стоит ли нам снять указанное выше ограничение? Есть другие мысли? Ваше здоровье :)

ну, это неприятный обходной путь :) Он доставит меня туда, где мне нужно быть, но я бы предпочел иметь более элегантное решение, чем это, если возможно.

Может быть, новый интерфейс?

public interface ISequenceConversionPolicy
{
   bool TryConvertToSequence(object value, ILogEventPropertyValueFactory propertyValueFactory, out SequenceValue result);
}

Также возможно:

public interface IDictionaryConversionPolicy

:)

На данный момент закрытие, но открыты для работы над этим, если кто-то хочет попробовать PR. Спасибо за вклад! :)

@kkozmic Есть ли шанс взглянуть на ваш IDestructuringPolicy (тот, который работает с оболочкой)?

Извините, у меня больше нет этого кода.

Вторник, 3 февраля 2015 г., 4:38:45, Гарри Макинтайр [email protected]
написал:

@kkozmic https://github.com/kkozmic Если бы я мог взглянуть на
ваш IDestructuringPolicy (тот, который работает с оболочкой)?

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/serilog/serilog/issues/30#issuecomment -72500600.

371 перекликается с этим, я думаю, что мы должны открыть его заново, но, возможно, это будет "2.0"

Сборка 1.4.168 снимает ограничение, делавшее это неудобным; хотел бы увидеть _Serilog.Extras.JObject_ или аналогичный, который использует это в своих интересах :-)

Спасибо @Jaben за это!

Отлично!

@nblumhardt , это

Была ли эта страница полезной?
0 / 5 - 0 рейтинги