При попытке Console.Writeline вывода запроса DynamoDB (документ), я получаю "Amazon.DynamoDBv2.DocumentModel.DynamoDBBool" вместо значения "истина" или "ложь". Как напечатать правильное представление ToString() для любого заданного значения, полученного из DynamoDB, будь то строка, int или логическое значение.
foreach (var resultDocument in resultDocs)
{
foreach (var resultDocItem in resultDocument)
{
printString += $",{resultDocItem.Value.ToString()}";
}
}
Этот код печатает "Amazon.DynamoDBv2.DocumentModel.DynamoDBBool", когда булево значение указывается вместо "true" или "false"
Что вы получаете из 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);
}