В Твиттере вы упомянули, что это должно быть довольно просто реализовать через IDestructuringPolicy.
;)
Я пытался заставить это работать через 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.
Сборка 1.4.168 снимает ограничение, делавшее это неудобным; хотел бы увидеть _Serilog.Extras.JObject_ или аналогичный, который использует это в своих интересах :-)
Спасибо @Jaben за это!
Отлично!
@nblumhardt , это
Самый полезный комментарий
https://github.com/destructurama/json-net