[英]Converting Kusto client response to list of objects returns empty objects
我正在嘗試轉換從運行 Kusto 查詢接收到的響應,在該查詢中我正在檢索表的架構。 我的 Kusto 查詢如下所示:
tableName | getschema
在 Kusto Explorer 中看到的此類查詢的響應看起來像這樣(不完整)
回到我的 C# 代碼中,我定義了以下類:
public class DatasetColumn
{
/// <summary>
/// Name of the column
/// </summary>
public string? ColumnName { get; set; }
/// <summary>
/// Position of this column within the schema
/// </summary>
public int ColumnOrdinal { get; set; }
/// <summary>
/// Type of data contained in this column
/// </summary>
public string? DataType { get; set; }
/// <summary>
/// Type of data contained in this column
/// </summary>
public string? ColumnType { get; set; }
}
我正在嘗試使用 Kusto.Cloud.Data.ExtendedDataReader 中定義的名為 ToEnumerable 的方法從 IDataReader 中檢索 DatasetColumn 對象列表:
using (var client = storageClientFactory.CreateCslQueryProvider(new Kusto.Data.KustoConnectionStringBuilder(connectionDetails!.ClusterUrl)))
{
var schemaQuery = KustoSchemaQueryBuilder.GetKustoSchemaQuery(connectionDetails!.EntityName);
var clientRequestProperties = new ClientRequestProperties() { ClientRequestId = Guid.NewGuid().ToString() };
var queryTask = client.ExecuteQueryAsync(connectionDetails.DatabaseName, schemaQuery, clientRequestProperties);
using (var reader = await queryTask.ConfigureAwait(false))
{
using (reader)
{
return reader.ToEnumerable<DatasetColumn>().ToArray();
}
}
}
希望我能得到一組 DatasetColumn 對象。 事實上,我確實得到了一個 DatasetObjects 列表,列表中的對象數對應於我期望的結果數,但所有對象的所有字段都設置為默認值(字符串為空,整數為 0)。
我做錯了什么,如何讓這個方法返回正確初始化的對象? 我是否誤解了這種擴展方法的意義?
稍后編輯:我正在添加一個最小程序來重現該問題
using Kusto.Cloud.Platform.Data;
using Kusto.Data;
using Kusto.Data.Net.Client;
using Newtonsoft.Json;
namespace ConsoleApp1
{
class DatasetColumn
{
public string? ColumnName { get; set; }
public int ColumnOrdinal { get; set; }
public string? DataType { get; set; }
public string? ColumnType { get; set; }
}
internal class Program
{
static void Main(string[] args)
{
var sb = new KustoConnectionStringBuilder("https://help.kusto.windows.net/Samples; Fed=true; Accept=true");
using (var client = KustoClientFactory.CreateCslQueryProvider(sb))
{
using (var result = client.ExecuteQuery("StormEvents | getschema"))
{
var cols = result.ToEnumerable<DatasetColumn>().ToArray();
Console.WriteLine(JsonConvert.SerializeObject(cols));
}
}
}
}
}
您的代碼正在使用的DataReader
擴展方法的底層實現(作為客戶端庫的一部分提供)當前不支持屬性或私有字段。
您可以將DatasetColumn
類中的屬性更改為字段,也可以編寫自己的實現。
例如,替換這個:
public int ColumnOrdinal { get; set; }
有了這個:
public int ColumnOrdinal;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.