使用C#+SSIS从API提取JSON到SQL表时遇JProperty错误
问题排查与解决
错误原因
你遇到的错误是遍历层级错误导致的:
data = dynJson.transactionsList对应JSON里的交易对象数组,data[0]是数组中的第一个交易对象(JObject类型)。- 遍历JObject时,迭代返回的是对象的单个属性(JProperty类型,比如"transaction""transactionType"这类键),而非完整的交易对象,因此调用
item.transaction会提示JProperty没有该定义。
修正步骤
1. 调整遍历逻辑
直接遍历data数组(而非data[0]),因为data本身就是交易对象的集合:
var data = dynJson.transactionsList; if (ResponseCode == "0") { // 遍历data数组,每个item是完整的交易对象 foreach (var item in data) { OutputBuffer.AddRow(); OutputBuffer.transaction = Convert.ToString(item["transaction"]); OutputBuffer.transactionType = Convert.ToString(item["transactionType"]); // 注意:你的JSON中无amount字段,若API未返回该字段请注释/删除此行 // OutputBuffer.amount = Convert.ToString(item["amount"]); // JSON里日期键是大写的Date,需匹配大小写 OutputBuffer.date = Convert.ToString(item["Date"]); } offset = offset + 100; }
2. 修正JSON格式(若为书写失误)
你给出的data = {[...]}是无效JSON结构,对应代码里的dynJson.transactionsList,正确格式应为:
{ "transactionsList": [ { "transaction": "54226", "transactionType": "Purchase", "Date": "2023-02-01 00:19:50.0", "status": "Active" }, { "transaction": "232130962", "transactionType": "Purchase", "Date": "2023-01-25 00:00:00.0", "status": "Active" }, { "transaction": "32154299", "transactionType": "Purchase", "Date": "2023-02-01 01:31:05.0", "status": "Active" } ] }
3. 字段匹配注意事项
- JSON键名大小写敏感:原代码里的
item.date对应JSON的Date(大写D),需统一为item["Date"]或item.Date。 - 若API确实不返回
amount字段,需删除或注释对应的赋值代码,避免空值或额外报错。
内容的提问来源于stack exchange,提问作者Ricardo Ferreira
相关产品推荐
相关产品推荐

