You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何反序列化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 05:21:56