【问题标题】:Convert datatable to JSON and publish to PubSub row by row将数据表转换为 JSON 并逐行发布到 PubSub
【发布时间】:2020-03-08 20:02:50
【问题描述】:

我的流程是从 SQL Server 数据库中获取数据(我正在使用数据表),然后将其发布到 PubSub(每行的消息不同)。有人可以帮助并建议我这样做的方式吗?

我正在使用 Newtonsoft.Json 转换为 JSON。

这是我与数据库的连接:

    public DataTable RequestDataDB()
    {            
        SqlConnection database = new SqlConnection(DatabaseConn.DBConnectionString);
        database.Open();

        SqlCommand databaseCmd = new SqlCommand("Request_PubData", database);
        SqlDataAdapter da = new SqlDataAdapter(databaseCmd);
        da.Fill(dt);

        database.Close();
        return dt;
    }

这就是我调用它并转换为 JSON 并发布它的方式。

Console.WriteLine("Data to be Published Total : " + totalRows);
string jsonOutput = JsonConvert.SerializeObject(RequestDataDB, Formatting.Indented);
string messageId = await publisher.PublishAsync(jsonOutput);
Console.WriteLine(jsonOutput);
await publisher.ShutdownAsync(TimeSpan.FromSeconds(15));   

感谢您的帮助。

【问题讨论】:

  • 您的代码正在将数据表转换为 json 并发布。您可以考虑循环遍历数据表行并单独发布它
  • 另外一个问题:你为什么要逐行发布?没有更高效的事情可做?
  • 鉴于您的DataTable,您希望 JSON 输出是什么样的? Convert a data row to a JSON object 可能有效,也可能无效,如果不知道您所需的具体输出格式,我们将无法回答。

标签: c# json sql-server google-cloud-pubsub


【解决方案1】:

非常感谢您提供的所有提示和答案。我不胜感激。 实际上,要求是逐个对象{} {} 而不是按顺序发布对象[ {}, {} ]。 所以这是解决方案。非常感谢你们。

 foreach (DataRow DataDBRow in RequestDataDB.Rows)
            {
                string json = new JObject(
                                         RequestDataDB.Columns.Cast<DataColumn>()
                                        .Select(DataDBColumn => new JProperty(DataDBColumn.ColumnName, JToken.FromObject(DataDBRow[DataDBColumn])))
                                        ).ToString(Formatting.None);
                Console.WriteLine(json);
                Console.WriteLine();
                string messageId = await publisher.PublishAsync(json);

            }
            await publisher.ShutdownAsync(TimeSpan.FromSeconds(15));
            //databaseConn.Close();
            Console.ReadLine();

之前的代码:

string jsonOutput = JsonConvert.SerializeObject(RequestDataDB, Formatting.Indented);

【讨论】:

    猜你喜欢
    • 2018-02-04
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2021-07-19
    • 2018-07-10
    • 2018-05-11
    相关资源
    最近更新 更多