簡體   English   中英

將 Kusto 客戶端響應轉換為對象列表會返回空對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM