Amazon dynamodb 解析dynamo db queryresponse到对象

Amazon dynamodb 解析dynamo db queryresponse到对象,amazon-dynamodb,Amazon Dynamodb,我使用DynamoDB通过以下命令查询表 QueryRequest request = new QueryRequest { TableName = "Events", ExclusiveStartKey = startKey, KeyConditions = keyConditions, IndexName = "Title-index" // Specify the index to query against }; // Issue request QueryRes

我使用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是预定义的

问题是,当我使用DynamoDB.Context时,QueryResult结果变量未解析为我的本机对象。您使用预期类型强制转换了方法,但在本例中,我需要解析QueryResult。。。 还有别的办法吗?
还是应该解析对象

你想要的是某种ORM——一本好书就是。还可以查看同样显示示例的

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

在你的处理方法

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

foreach (Dictionary<string, AttributeValue> item in response.QueryResult.Items)
{
  // Process the result.
  PrintItem(item);
} 
var response=client.Query(请求);
var结果=response.QueryResult;
foreach(响应中的字典项.QueryResult.Items)
{
//处理结果。
打印项目(项目);
} 
打印项目实施

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("************************************************");
    }
私有静态void打印项(字典属性列表)
{
foreach(属性列表中的KeyValuePair kvp)
{
字符串attributeName=kvp.Key;
AttributeValue值=千伏值;
控制台写入线(
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(“****************************************************************”);
}

我最终使用了类似于:

using System.Linq;

...

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

var items = result.Items.FirstOrDefault();

var doc = Document.FromAttributeMap(items);
   
var myModel = DynamoDBContext.FromDocument<MyModelType>(doc);
使用System.Linq;
...
//发出请求
QueryResponse result=AmazonDynamoDBClient.Query(请求);
var items=result.items.FirstOrDefault();
var doc=文件。来自属性映射(项目);
var myModel=DynamoDBContext.FromDocument(doc);

我也遇到了同样的问题,我发现通过使用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);
var queryFilter=newqueryfilter(indexedColumnName,QueryOperator.Equal,targetValue);
Table Table=Table.LoadTable(客户机,配置.实例.动态);
var search=table.Query(新的QueryOperationConfig{IndexName=IndexName,Filter=queryFilter});
列表对象=新列表();
列表文档集=新列表();
做
{
documentSet=search.GetNextSetAsync().Result;
foreach(文档集中的var文档)
{
var record=JsonConvert.DeserializeObject(document.ToJson());
对象。添加(记录);
}
}而(!search.IsDone);

希望它能帮到你

是的,但问题是我在查询索引表时不能使用持久性框架,我使用de context.query(_HashValue,queryoperator(queryoperator.equal),value);它返回一个异常(索引不能为空)或类似的东西。。。谢谢你的时间是的,我正在考虑制作一个手动解析的方法,但是我想跳过它。。。。持久化框架将项目解析为本机对象类型您找到了一种很好的方法吗?使用DynamoDBContext或类似的东西…太棒了,它对我很有用。我认为这应该是被接受的答案。这绝对应该被标记为被接受的答案!对于一些我本以为会更加明显的事情,很难找到答案。请注意,与上面代码的唯一区别在于.FromDocument是DynamoDBContext实例上的一个方法。否则,就太完美了!终于找到了!!这真的很难找到,非常感谢@leeThis,但当使用FromDocument方法时,我发现它也抛出了一个可描述的请求,还有其他人有这个吗?有人能在这里回答我的问题吗:。我已经阅读了您的答案,但QueryResponse.Items.FirstOrDefault()似乎不存在。