Это может помочь в том, что они указывают на принцип - вы можете создать аналогичный, используя предпочитаемый вами анализатор JSON вместо агрегирования в CSV - в конце концов, JSON - это просто отформатированная строка.
Вы бы заменили агрегатную часть чем-то, что создавало JSON. В моем случае, агрегат разделяет значения свойств через запятую, у вас, очевидно, будет другая вещь.
<System.Runtime.CompilerServices.Extension()>
Public Function ToCSV(Of T)(source As IEnumerable(Of T), dataFields As IEnumerable(Of Expressions.Expression(Of Func(Of T, String)))) As String()
Dim compiledFields As IEnumerable(Of Func(Of T, String)) = dataFields.Select(Function(e) e.Compile)
Return source.
Select(Function(x) compiledFields.Select(Function(d) d.Invoke(x)).
Aggregate(Function(seed, value) seed & ", " & value)).ToArray
End Function
<System.Runtime.CompilerServices.Extension()>
Public Function ToCSV(Of T)(source As IEnumerable(Of T), dataFields As IEnumerable(Of String)) As String()
Dim fields = GetType(T).GetProperties().Where(Function(p) dataFields.Any(Function(f) f = p.Name))
Return source.Select(Function(x) fields.Select(Function(f) f.GetValue(x, Nothing).ToString).
Aggregate(Function(seed, value) seed & ", " & value)).ToArray
End Function
Изменить - вероятно, следует указать, что существует очень высокая вероятность сбоя, потому что, если вы позволяете пользователям указывать имена свойств, они получат их неправильно, и они не будут найдены - вы также потенциально можете открыть проблемы безопасности ваши таблицы содержат конфиденциальные поля, если вы не добавите какой-либо слой безопасности для фильтрации этих имен свойств