Auf Twitter haben Sie erwähnt, dass die Implementierung über IDestructuringPolicy ziemlich einfach sein sollte
;)
Ich habe versucht, dies über IDestructuringPolicy
zum Laufen zu bringen, aber ich fürchte, es wird nicht funktionieren.
Ein flüchtiger Blick durch die Codebasis scheint anzuzeigen (hier https://github.com/serilog/serilog/blob/master/src/Serilog/Parameters/PropertyValueConverter.cs?source=c#L112), dass zuerst PropertyValueConverter
behandelt die Objekte als Sammlung (alle JToken
s sind IEnumerable
) und macht sich daher nie die Mühe, mit IDestructuringPolicy
prüfen.
Ich _glaube_ vielleicht, den IDestructuringPolicy
eine höhere Priorität zu geben (zuerst überprüfen und dann auf das Standardverhalten zurückgreifen) könnte einen Ausweg bieten, aber ich kann mich völlig irren, ich habe nur 2 Minuten damit verbracht, mir das anzuschauen Code.
Ich habe vorerst eine schnelle Problemumgehung erstellt, indem ich ... eine Umleitungsebene hinzugefügt habe.
Ich habe eine Klasse namens JObjectWrapper
hinzugefügt, die nicht IEnumerable
und ich schließe meine JObject
damit ein. Jetzt wird mein IDestructuringPolicy
aufgerufen und die Welt ist wieder ein glücklicher Ort.
@kkozmic wie ist das geworden? Lohnt es sich, die oben erwähnte Einschränkung aufzuheben? Irgendwelche anderen Gedanken? Danke schön :)
Nun, es ist eine unangenehme Problemumgehung :) Es bringt mich dorthin, wo ich sein muss, aber ich hätte lieber eine elegantere Lösung, wenn möglich.
Vielleicht eine neue Schnittstelle?
public interface ISequenceConversionPolicy
{
bool TryConvertToSequence(object value, ILogEventPropertyValueFactory propertyValueFactory, out SequenceValue result);
}
Außerdem vielleicht:
public interface IDictionaryConversionPolicy
:)
Vorerst geschlossen, aber offen für diese Arbeit, wenn jemand daran interessiert ist, eine PR auszuprobieren. Danke für alle Inputs Leute! :)
@kkozmic Kann ich mir Ihr IDestructuringPolicy
ansehen (dasjenige, das mit dem Wrapper funktioniert)?
Tut mir leid, ich habe diesen Code nicht mehr bei mir.
Am Di 03 Feb 2015 um 04:38:45 Harry McIntyre [email protected]
schrieb:
@kkozmic https://github.com/kkozmic Bei jeder Gelegenheit könnte ich einen Blick darauf werfen
Ihre IDestructuringPolicy (diejenige, die mit dem Wrapper funktioniert)?—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/serilog/serilog/issues/30#issuecomment -72500600.
Build 1.4.168 entfernt die Einschränkung, die dies umständlich machte; würde gerne ein _Serilog.Extras.JObject_ oder ähnliches sehen, das dies ausnutzt :-)
Danke @Jaben, dass
Schön!
@nblumhardt das ist
Hilfreichster Kommentar
https://github.com/destructurama/json-net