разрушение serilog — смешанные типы

#elasticsearch #serilog

#elasticsearch #serilog

Вопрос:

У меня есть класс, Response где Data type — это в основном сложный тип типов SI, таких как Voltage , Current и т. Д

 public class Response
{
   string Name { get; }
   object Data { get; }
   ctor(...) {}

}

public class Voltage {
   double NumberValue { get; }
   ...
}


public class Number {
   bool NumberValue { get; }
   ...
}

public class Text {
   string TextValue { get; }
   ...
}
  

Если я уничтожу его с помощью {@Response} и сохраню в elastic search, эти типы будут корректно работать без какого-либо столкновения типов, т.Е. A Voltage будет уничтожаться как Response.Data.NumberValue (числовой), а a Text будет уничтожаться в Response.Data.TextValue (текстовый).

Однако иногда также возможно, что Data это может быть просто int или string . В этих случаях это привело бы к разрушению до Response.Data (long) и Response.Data (text). Что вызывает проблему в индексе эластичного поиска.

Мне интересно, могу ли я использовать метод IDestructuringPolicy s TryDestructure() для пользовательского уничтожения Response класса. Я бы хотел, чтобы int также выполнялось разрушение на Response.Data.NumberValue .

Комментарии:

1.Кажется, следующее может сработать в TryDestructure logEventProperties.Add( new LogEventProperty("Data", new StructureValue(new[] { new LogEventProperty("NumberValue", propertyValueFactory.CreatePropertyValue((double)data)) }))); Позвольте мне протестировать это полностью