【问题标题】:.Value prints as Amazon.DynamoDBv2.DocumentModel.DynamoDBBool instead of 'true' or 'false'.Value 打印为 Amazon.DynamoDBv2.DocumentModel.DynamoDBBool 而不是“真”或“假”
【发布时间】:2019-02-07 15:38:00
【问题描述】:

当尝试 Console.Writeline DynamoDB 查询(文档)的输出时,我得到“Amazon.DynamoDBv2.DocumentModel.DynamoDBBool”而不是“true”或“False”值。如何打印来自 DynamoDB 的任何给定值的正确 ToString() 表示,无论它是字符串、int 还是布尔值。

foreach (var resultDocument in resultDocs)
{
    foreach (var resultDocItem in resultDocument)
    {
      printString += $",{resultDocItem.Value.ToString()}";
    }
}

当遇到布尔值而不是“真”或“假”时,此代码将打印“Amazon.DynamoDBv2.DocumentModel.DynamoDBBool”

【问题讨论】:

    标签: c# .net amazon-web-services amazon-dynamodb


    【解决方案1】:

    您从foreach 中得到的是KeyValuePair<string, DynamoDBEntry>,它具有默认的ToString()。要获得您实际想要的字符串表示形式,您需要使用内置的强制转换运算符来返回您正在寻找的实际值。

    特别是对于DynamoDBBool,它可能看起来像这样:

    var doc = new Document();
    doc.Add("aaa", new DynamoDBBool(true));
    foreach(var item in doc)
    {
        var s = item.Value is DynamoDBBool ? item.Value.AsBoolean().ToString() : item.Value.ToString();
        Console.WriteLine($"{item.Key} : {s}");
    }
    

    为了更轻松地涵盖所有选项,我们可以使用 doc 只是键值对的 JSON 文档这一事实。这会将文档转换为 JSON,然后打印每个条目的正确字符串表示形式。

    var doc = new Document();
    doc.Add("aaa", new DynamoDBBool(true));
    var dict = JsonConvert.DeserializeObject<IDictionary<string, string>>(doc.ToJson());
    foreach(var item in dict)
    {
        Console.WriteLine(item.Value);
    }
    

    【讨论】:

    • 它不满足“打印来自 DynamoDB 的任何给定值的正确 ToString() 表示,无论它是字符串、整数还是布尔值”。除非 API 中有其他机制,否则您似乎需要制作一个长列表类型来检查 docs.aws.amazon.com/sdkfornet/v3/apidocs/items/DynamoDBv2/… 中的每个变体。
    • @ShortFuse 这只是为了满足布尔值,这就是为什么我说你需要使用内置的强制转换运算符。这是一个很长的清单,给了我一个新的想法。将编辑
    • 我对 JSON 有同样的想法。我目前无法对其进行测试,但 asPrimitive() 也可能是基于docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/… 的解决方案,无论哪种方式,您似乎都在正确的轨道上。祝你好运!
    猜你喜欢
    • 2022-11-10
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    相关资源
    最近更新 更多