【发布时间】:2021-08-20 23:18:27
【问题描述】:
我需要在 httptrigger 函数中计算请求体中的数据。数据以对象类型的形式出现。 我正在反序列化 reqd 主体,如下所示。以下是我在 req.body 中获取的对象类型数据。
{
"Response": [
{
"id": "1",
"name": "Warburtons Medium Sliced Soft White Bread 400g",
"description": "Warburtons Medium Sliced White 400G",
"brand": "Warburtons",
"ean": "123",
"mediaStorageKey": "b",
"maxQuantity": 6,
"price": 0.95,
"size": 400,
"sizeUnits": "Grams"
},
{
"id": "a",
"name": "Co-op Orvieto Classico 75cl",
"description": "Co-op Orvieto Classico 75CL",
"brand": "Co-op",
"ean": "489",
"mediaStorageKey": "c",
"maxQuantity": 6,
"price": 5.5,
"size": 75,
"sizeUnits": "Centilitres"
},
{
"id": "kl",
"name": "Co Op Garden Peas in Water 290g",
"description": "Co-op Garden Peas 290G",
"brand": "Co Op",
"ean": "678",
"mediaStorageKey": "f",
"maxQuantity": 6,
"price": 0.45,
"size": 175,
"sizeUnits": "Grams"
}
]
}
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic body = JsonConvert.DeserializeObject(requestBody);
dynamic data = body["Response"];
直到这个我得到如下数据。
{[{"id":"1","name":"b"},{"id":"f","name":"j"}]}
但现在我无法计算在这种情况下给出 2 的这些数据,因为我必须申请循环。 Count、Count() 都没有在这里工作。我收到以下错误。
Newtonsoft.Json.Linq.JValue 不包含Count 的定义
【问题讨论】:
-
您能否发布完整的
requestBodyJSON(至少足以让我们运行您的dynamic data = body["Response"])并获得与您显示的内容相似的内容(顺便说一下,这不是有效的 JSON) -
能否请edit 分享minimal reproducible example 的问题?如果我在您的问题中使用 JSON 并尝试解析它,则会收到错误
Invalid property identifier character: [. Path '', line 1, position 1.,请参阅 dotnetfiddle.net/FVmqgM。问题是 JSON 格式不正确——它有额外的外括号{},不应该出现。 -
如果我通过删除外括号来修复 JSON,您的代码会生成 *
Accessed JArray values with invalid key value: "Response". Int32 array index expected.异常,因为根 JSON 容器是数组而不是对象,因此没有"Response"属性。见dotnetfiddle.net/KYJuhG。 -
我的疯狂猜测是原始 JSON 看起来像
{"Response" : [{"id":"1","name":"b"},{"id":"f","name":"j"}]},当他获得响应值时,它变成了[{"id":"1","name":"b"},{"id":"f","name":"j"}],并且调试器用{}括号括起来显示它。只是猜测 -
您的疯狂猜测似乎是合理的,但minimal reproducible example 会澄清。特别是因为问题是使用
dynamic来处理所有事情,这使得通过检查很难知道发生了什么(并且可能导致问题)。
标签: c# asp.net-core json.net azure-http-trigger