DynamoDB .NET如何获取JSON项并直接返回客户端

时间:2015-11-19 16:16:37

标签: .net amazon-dynamodb aws-sdk

我的代码是这样的,我只是使用DynamoDB扫描,并将结果更改为JSON

var client = new AmazonDynamoDBClient();
var request = new ScanRequest
            {
                TableName = "wow_chat_msg",
            };
var response = client.Scan(request);
var jsonSerialiser = new JavaScriptSerializer();
            var json = jsonSerialiser.Serialize(response.Items);

但之后返回的JSON是这样的:

[{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"ABC\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"CDE\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1010\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]},\"group_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"ABC\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"CDE\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"3\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Chong\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Peter\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"2\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"ABC\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"CDE\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1011\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Chan\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Rico\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}}]

转义字符是因为我将其更改为字符串。但我想问一下如何摆脱不必要的属性?就像我只想要json值中的“2”,但是有太多其他属性,如“S”,“SS”,“BOOL”......等我只想要一个漂亮的JSON。

请帮助,我搜索了很多文件,并希望寻求解决方案。

2 个答案:

答案 0 :(得分:1)

我有一个返回漂亮JSON的解决方案。这用于Lambda函数。 public List<dynamic> GetDynamoData(string dynamoTableName, ILambdaContext context) { Amazon.DynamoDBv2.AmazonDynamoDBConfig amazonDynamoDBConfig = new Amazon.DynamoDBv2.AmazonDynamoDBConfig { RegionEndpoint = RegionEndpoint.XWZ}; Amazon.DynamoDBv2.AmazonDynamoDBClient client = new Amazon.DynamoDBv2.AmazonDynamoDBClient(amazonDynamoDBConfig); Table myTable = Table.LoadTable(client,dynamoTableName); ScanFilter scanFilter = new ScanFilter(); scanFilter.AddCondition("IDCOLULM", ScanOperator.GreaterThan, 123465); //Whatever your filter is Search search = myTable.Scan(scanFilter); List<dynamic> results = new List<dynamic>(); do { var docList = search.GetNextSetAsync(); docList.Result.ForEach(doc=> { dynamic x = Newtonsoft.Json.JsonConvert.DeserializeObject(doc.ToJson()); results.Add(x); }); } while (!search.IsDone); return results; }

答案 1 :(得分:0)

刚刚找到答案。

使用DynamoDB的低级api将返回大量不必要的数据以用于低级别使用。所以我们可以使用高级文档模型。

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ScanMidLevelDotNet.html

使用Table.scan,然后使用您自己的方法组合Document ofToJSON(),这里我使用ArrayList来组合它们。

然后在我获得Object列表后,返回客户端。一切都很美好。