如何反序列化Autodesk Forge .NET客户端GetFolderContents的返回结果
解决Forge .NET客户端GetFolderContents返回结果的处理问题
我正尝试用Forge .NET客户端调用Autodesk数据管理API,列出指定BIM360文件夹里的文件内容。GetFolderContents方法返回JsonApiCollection,但不清楚如何用SDK的模型对象处理该响应数据。
原文档中的C#示例代码(中文注释版):
// 配置OAuth2访问令牌以授权:oauth2_access_code Configuration.Default.AccessToken = "你的访问令牌"; var apiInstance = new FoldersApi(); var projectId = "项目ID示例"; // string | 项目ID var folderId = "文件夹ID示例"; // string | 文件夹ID var filterType = new List<string>(); // List<string> | 按引用目标的`type`过滤(可选) var filterId = new List<string>(); // List<string> | 按引用目标的`id`过滤(可选) var filterExtensionType = new List<string>(); // List<string> | 按扩展类型过滤(可选) var pageNumber = 56; // int? | 指定页码(可选) var pageLimit = 56; // int? | 指定每页最大元素数(可选) try { JsonApiCollection result = apiInstance.GetFolderContents(projectId, folderId, filterType, filterId, filterExtensionType, pageNumber, pageLimit); Debug.WriteLine(result); } catch (Exception e) { Debug.Print("调用FoldersApi.GetFolderContents时出现异常:" + e.Message ); }
实际处理返回结果的方法
JsonApiCollection已经是SDK自动反序列化后的对象,无需手动再做反序列化操作。它的Data属性包含了文件夹内的所有条目(子文件夹或文件),每个条目是JsonApiResource类型,可根据Type字段判断实际类型并强转为对应模型:
- 类型为
folders的条目 → 强转为Folder模型 - 类型为
items的条目 → 强转为Item模型(代表文件)
修改后的示例代码:
// 配置OAuth2访问令牌 Configuration.Default.AccessToken = "你的访问令牌"; var apiInstance = new FoldersApi(); var projectId = "你的项目ID"; var folderId = "你的文件夹ID"; // 可选:只获取文件传入new List<string>{"items"};只获取文件夹传入{"folders"} var filterType = new List<string>(); var pageLimit = 100; // 每页最多返回100条,按需调整 try { JsonApiCollection result = apiInstance.GetFolderContents(projectId, folderId, filterType, null, null, null, pageLimit); // 遍历所有返回条目 foreach (var resource in result.Data) { if (resource.Type.Equals("folders", StringComparison.OrdinalIgnoreCase)) { var subFolder = resource as Folder; Console.WriteLine($"子文件夹:{subFolder.Attributes.Name} | ID:{subFolder.Id}"); } else if (resource.Type.Equals("items", StringComparison.OrdinalIgnoreCase)) { var fileItem = resource as Item; Console.WriteLine($"文件:{fileItem.Attributes.Name} | ID:{fileItem.Id}"); // 如需获取文件版本、大小等详细信息,可调用ItemsApi.GetItemVersions(fileItem.Id) } } } catch (Exception e) { Console.WriteLine("调用API出错:" + e.Message); }
注意事项
JsonApiResource的Attributes属性包含条目名称、创建时间等元数据,强转后可直接访问- 如果需要分页加载所有内容,可通过
result.Links中的next链接判断是否还有下一页,循环调用API直到没有下一页 - 确保访问令牌拥有
data:read权限,否则会返回权限错误
内容的提问来源于stack exchange,提问作者oli
相关产品推荐
相关产品推荐

