C#互操作将JSON值添加到工作表
如何从C#互操作将JSON值添加到工作表,c#,json,excel,vsto,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_tit
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"
}
]}
预期结果:这就是我试图完成此操作的方式,但它返回以下错误: 与“System.Collections.Generic.List.AddRange(System.Collections.Generic.IEnumerable)”匹配的最佳重载方法具有一些无效参数
dynamic response=JsonConvert.DeserializeObject(responseXml);
var just_rs=response.report_suites;
var报告标题=新列表();
var报告_id=新列表();
foreach(仅包含可变项目){
报告标题。添加范围(项目。现场标题);
报告id添加范围(项目rsid);
}
rng=(Excel.Range)ws.Range[ws.Cells[2,1],ws.Cells[report_id.Length,1];
rng.Value=报告id;
rng=(Excel.Range)ws.Range[ws.Cells[2,2],ws.Cells[report_title.Length,2];
rng.Value=报告标题;
其中,response
是上面提到的我的JSON
对象
如果我使用Add
而不是AddRange
我会得到以下错误:
与“System.Collections.Generic.List.Add(string)”匹配的最佳重载方法具有一些无效参数
item.site\u title
不是字符串,但您正在尝试将其添加到string
如果我正确地回忆起JSONVERT to adynamic
会导致JArray/JObject/JToken,那么您可能需要查看确定项.site\u title
是什么类型,并查看其将值提取到字符串的适当方法
至于使用AddRange()
方法,您确定这是您想要使用的吗?您正处于试图添加单个元素范围的循环中。我想你是想用Add()
来代替。确定类型并转换为字符串后,使用Add()
方法。按如下方式将数据添加到列表中:report\u title.AddRange(item.site\u title.ToString())代码>,但现在尝试在工作表中设置数据时失败,在rng.Value=report\u id上从HRESULT:0x800A03EC
返回异常代码>。。。你知道为什么吗?试着用一个固定的名称来表示:rng.Value=ws.Parent.Parent.Transpose(report\u title.AsEnumerable().ToArray())
作为旁注,如果这些是您希望在代码中操作的值,您可能希望创建一个表示数据的类,以便轻松地序列化/反序列化
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;