c# - 如何解决“Neo4j 返回了有效响应,但是 Neo4jClient 无法反序列化为您提供的对象结构。” 错误?
问题描述
我正在使用带有 .net 核心 API 的 neo4jclient 图形数据库。我必须添加健康检查。我使用 Ihealthcheck 接口创建了自己的健康检查。下面是我的健康检查课
公共类 DatabaseHealthCheck : IHealthCheck
{
public DatabaseHealthCheck(IGraphClient graphClient)
{
_graphClient = graphClient;
}
private readonly IGraphClient _graphClient;
public async Task<HealthCheckResult> CheckHealthAsync(
HealthCheckContext context,
CancellationToken cancellationToken = default(CancellationToken))
{
try
{
var result = await _graphClient.Cypher.Match(@"show databases")
.Return((n) => n.As<DatabaseDetail>()).ResultsAsync;
foreach (var res in result)
{
if (res.currentStatus == "Online")
{
return await Task.FromResult(
HealthCheckResult.Healthy("Healthy"));
}
}
}
catch (Exception ex)
{
return new HealthCheckResult(status: context.Registration.FailureStatus, exception: ex);
}
return HealthCheckResult.Healthy();
// return await Task.FromResult(
// new HealthCheckResult(context.Registration.FailureStatus,
// "Unhealthy"));
}
}
通过此运行状况检查,我想获取数据库详细信息,然后检查数据库天气的状态,它是否在线,但我收到以下错误
Neo4j 返回了一个有效的响应,但是 Neo4jClient 无法反序列化为您提供的对象结构。
谁能帮我 ?
解决方案
您正在编写的查询不会返回任何内容,您实际执行的是:
MATCH (show databases)
RETURN n
如果您将代码更改为如下所示,您可以看到这一点:
var query = _graphClient.Cypher.Match(@"show databases")
.Return((n) => n.As<string>());
var text = query.Query.DebugQueryText;
var result = await query.ResultsAsync;
如果你放一个断点,你就可以看到text
变量是什么,你就可以看到它。
现在!我想不出当你使用时如何得到你想要的东西GraphClient
——它可能是可能的BoltGraphClient
——但你得到的错误意味着你使用的是前者。
如果您在 上BoltGraphClient
,您可以访问Driver
并执行:
var session = ((BoltGraphClient)_graphClient).Driver.AsyncSession(d => d.WithDatabase("system"));
var cursor = await session.RunAsync("SHOW DATABASES");
while (await cursor.FetchAsync())
{
var name = cursor.Current.Values["name"].As<string>();
var status = cursor.Current.Values["currentStatus"].As<string>();
Console.WriteLine($"{name} is {status.ToUpperInvariant()}");
}
我不知道有关 http 的任何其他工作GraphClient
- 它需要添加到客户端。理论上——如果你愿意,这不是一个复杂的 PR。
推荐阅读
- windows - Windows 调度程序如何加载下一个进程以在 CPU 上运行?
- typo3 - Typo3 选择填充来自 sys_category 的子类别
- puppet - 在模块/lib/facter/* 下的文件中找到的事实将以什么顺序加载到 puppet 客户端上?
- java - 关于使用模拟条带进行 e2e 测试
- visual-studio - 在 Visual Studio 中切换内置目标
- lisp - 递归地将元素添加到列表中的 Lisp 函数
- python - Python/Numpy - 这个 for 循环的矢量化实现?
- batch-file - 如何使用批处理文件更改配置文件 (config.yml) 中的连接字符串?
- javascript - 为什么 connectedCallback 不适用于本机 HTMLElement(不是自定义元素)?
- bash - bash - 在运行其他命令时不运行某些命令?