Получите реальную ценность от ValueKindC#

Место общения программистов C#
Ответить
Anonymous
 Получите реальную ценность от ValueKind

Сообщение Anonymous »

У меня есть функция, которая создает предикат для фильтрации запроса из базы данных на основе Json, который поступает из запроса API. Я открыл другой вопрос, но не знаю лучше эту проблему. В новой версии .NET ядро ​​ASP.Net использует встроенный JsonConverter на основе System.Text.Json для привязки модели из ввода json.
У меня есть этот код р>

Код: Выделить всё

public static Expression BuildPredicate(
this List filter)
{
Expression rtn = (t) => true;

if (filter != null)
foreach (var item in filter)
{
var predicate = BuildPredicate(
item.FieldName, item.Comparison,
item.Value);
rtn = rtn.AndAlso(predicate);
}

return rtn;
}
Значит, вся проблема именно в этой строке

Код: Выделить всё

var predicate = BuildPredicate(
item.FieldName, item.Comparison,
item.Value);
Это пример значения переменной в связанной функции.
[img]https://i. sstatic.net/KcWid.png[/img]

Причина в том, что item.Value — это значение System.Json.Text, а не переменная с правильным тип. Моя функция проверяет тип переменной для сравнения и ожидает допустимый тип, например int, string, date и т. д.
Что мне нужно, так это как минимум определить реальный тип объекта, в основном прочитать ValueKind и преобразовать/привести переменную к этому типу.
Я искал в Интернете и нашел нашел несколько примеров, но это не мой случай, потому что значение меняется. Например, я могу получить на входе API что-то вроде

Код: Выделить всё

{
"filterParams": [
{
"comparison": "Contains",
"fieldName": "WordName",
"value": "test"
},
{
"comparison": "==",
"fieldName": "ID",
"value": 23
}
]
}
В приведенном выше Json значение в первом случае представляет собой строку, а во втором случае — целое число.
Как преобразовать item.Value в переменную правильного типа? Можно ли проверить тип ValueKind на основе item.Value?

Подробнее здесь: https://stackoverflow.com/questions/773 ... -valuekind
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»