.Value打印为Amazon.DynamoDBv2.DocumentModel.DynamoDBBool而不是'true'或'false'

时间:2019-02-07 15:38:00

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

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

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

当布尔值被命中而不是'true'或'false'时,此代码将打印“ Amazon.DynamoDBv2.DocumentModel.DynamoDBBool”

1 个答案:

答案 0 :(得分:3)

您从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);
}