C#Interop将JSON值添加到工作表

时间:2017-03-10 15:07:14

标签: c# json excel vsto

如何从JSON对象中获取所有值,然后立即将它们显示到工作表中?

这是JSON对象的外观:

{"report_suites": [
  {
    "rsid": "op-api-docs",
    "site_title": "API Docs Portal"
  },
  {
    "rsid": "op-bigideas",
    "site_title": "Big Ideas"
  },
  {
    "rsid": "op-education",
    "site_title": "Education"
  },
  {
    "rsid": "op-education-dev",
    "site_title": "Education - Dev"
  },
  {
    "rsid": "op-global",
    "site_title": "Global"
  },
  {
    "rsid": "op-global-dev",
    "site_title": "Global - Dev"
  }
]}

预期结果:
enter image description here

这是我尝试完成此操作的方法,但它返回以下错误:

  

最佳重载方法匹配' System.Collections.Generic.List.AddRange(System.Collections.Generic.IEnumerable)'有一些无效的论点

dynamic response = JsonConvert.DeserializeObject(responseXml);
var just_rs = response.report_suites;
var report_title = new List<string>();
var report_id = new List<int>();
foreach(var item in just_rs) {
    report_title.AddRange(item.site_title);
    report_id.AddRange(item.rsid);
}
rng = (Excel.Range)ws.Range[ws.Cells[2, 1], ws.Cells[report_id.Length, 1]];
rng.Value = report_id;
rng = (Excel.Range)ws.Range[ws.Cells[2, 2], ws.Cells[report_title.Length, 2]];
rng.Value = report_title;

response是我上面提到的JSON个对象。

如果我使用Add代替AddRange,我会收到以下错误:

  

最佳重载方法匹配&#39; System.Collections.Generic.List.Add(string)&#39;有一些无效的论点

1 个答案:

答案 0 :(得分:1)

item.site_title不是字符串,但您尝试将其添加到string

的集合中

如果我没记错JsonConvert到dynamic导致JArray / JObject / JToken,那么你可能想看看确定item.site_title是什么类型,并查看其适当的方法来提取值string

至于使用AddRange()方法,您确定这是您想要使用的吗?您在循环内部尝试添加单个元素的范围。我认为您希望使用Add()代替。确定类型并转换为字符串后,使用Add()方法。