public static T GetValue <T>(LogEventPropertyValue pv, T defaultValue) { switch (pv.GetType().Name) { case nameof(ScalarValue): return((T)((ScalarValue)pv).Value); } return(defaultValue); }
private static LogEventPropertyValue CreateEventPropertyValueRecursively(LogEventPropertyValue logEventPropertyValue, Func <string, LogEventPropertyValue, LogEventPropertyValue> recur) { switch (logEventPropertyValue) { case SequenceValue sequenceValue: { var values = sequenceValue.Elements .Select(e => recur(null, e)) .Where(e => e != null) .ToArray(); return(values.Any() ? new SequenceValue(values) : null); } case DictionaryValue dictionaryValue: { var values = dictionaryValue.Elements .ToDictionary(kvp => kvp.Key, kvp => recur(kvp.Key.Value?.ToString(), kvp.Value)) .Where(kvp => kvp.Value != null) .ToArray(); return(values.Any() ? new DictionaryValue(values) : null); } case StructureValue structureValue: { var values = structureValue.Properties .Select(p => new { p.Name, Value = recur(p.Name, p.Value) }) .Where(p => p.Value != null) .Select(p => new LogEventProperty(p.Name, p.Value)) .ToArray(); return(values.Any() ? new StructureValue(values, typeTag: structureValue.TypeTag) : null); } default: SelfLog.WriteLine("Unknown LogEventPropertyValue type: {0}", logEventPropertyValue.GetType()); return(null); } }