解析dynamo db queryresponse to object

时间:2013-12-09 16:38:55

标签: amazon-dynamodb

我正在使用DynamoDB使用以下命令查询表

QueryRequest request = new QueryRequest
{
   TableName = "Events",
   ExclusiveStartKey = startKey,
   KeyConditions = keyConditions,
   IndexName = "Title-index" // Specify the index to query against
};
// Issue request
QueryResponse result = client.Query(request);

ExclusiveStartKey和Keyconditions是预定义的

问题是QueryResult结果变量没有解析为我的本机对象,当我使用DynamoDB.Context时,你使用期望的类型转换方法,但在这种情况下我需要解析QueryResult ... 有没有其他方法可以做到这一点? 或者我应该解析对象?

4 个答案:

答案 0 :(得分:16)

我最终使用了类似的东西:

// Issue request
QueryResponse result = AmazonDynamoDBClient.Query(request);

var items = result.Items.FirstOrDefault();

var doc = Document.FromAttributeMap(items);

var myModel = DynamoDBContext.FromDocument<MyModelType>(doc);

答案 1 :(得分:0)

你想要的是某种ORM - 一个很好的读物是Using Amazon DynamoDB Object Persistence Framework。另请查看同时显示示例的API reference

答案 2 :(得分:0)

查看使用AWS SDK for .NET低级API查询表中的示例documentation

在你的处理方法

var response = client.Query(request);
var result = response.QueryResult;

foreach (Dictionary<string, AttributeValue> item in response.QueryResult.Items)
{
  // Process the result.
  PrintItem(item);
} 

PrintItem 实施

private static void PrintItem(Dictionary<string, AttributeValue> attributeList)
    {
      foreach (KeyValuePair<string, AttributeValue> kvp in attributeList)
      {
        string attributeName = kvp.Key;
        AttributeValue value = kvp.Value;

        Console.WriteLine(
            attributeName + " " +
            (value.S == null ? "" : "S=[" + value.S + "]") +
            (value.N == null ? "" : "N=[" + value.N + "]") +
            (value.SS == null ? "" : "SS=[" + string.Join(",", value.SS.ToArray()) + "]") +
            (value.NS == null ? "" : "NS=[" + string.Join(",", value.NS.ToArray()) + "]")
        );
      }
      Console.WriteLine("************************************************");
    }

答案 3 :(得分:0)

我陷入了同一个问题,发现通过将Table.Query与QueryOperationConfig一起使用,我可以指定要使用的索引。因为从该查询返回的Document对象具有“ ToJson()”方法,所以我能够将查询结果转换为Json,然后使用Json.Net将其反序列化回我的对象​​,这对我来说是完美的完全平坦的物体。

var queryFilter = new QueryFilter(indexedColumnName, QueryOperator.Equal, targetValue);
Table table = Table.LoadTable(client, Configuration.Instance.DynamoTable);
var search = table.Query(new QueryOperationConfig { IndexName = indexName, Filter = queryFilter });

List<MyObject> objects = new List<MyObject>();
List<Document> documentSet = new List<Document>();
do
{
    documentSet = search.GetNextSetAsync().Result;
    foreach (var document in documentSet)
    {
        var record = JsonConvert.DeserializeObject<MyObject>(document.ToJson());
        objects .Add(record);
    }
} while (!search.IsDone);

希望它可以帮助您!