Exemplo n.º 1
0
        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);
            }
        }