如何正确获取Azure Blob存储内容并将其转换为C#对象
问题原因
你的代码存在两个核心错误:
BlobClient.DownloadContent()返回的是Response<BlobDownloadResult>类型,你直接将整个响应对象传入BinaryData构造函数,相当于序列化了整个响应结构体(包含元数据+空Content的结构),没有取到真实的Blob内容。- 反序列化完成后你返回的是入参的
token对象,而非反序列化得到的result对象,就算内容读取成功也拿不到正确结果。
正确实现代码
public Token GetToken(UserSignature user, Token token) { try { var connectionString = "connection-string-goes-here"; BlobClient blobClient = new BlobClient(connectionString, "container-name-goes-here", "blob-name-goes-here"); // 下载内容后直接取响应Value的Content属性,就是你存储的原始二进制内容 var downloadResult = blobClient.DownloadContent(); BinaryData blobContent = downloadResult.Value.Content; // 直接用BinaryData的反序列化方法,无需手动转字节、转字符串 Token result = blobContent.ToObjectFromJson<OAuthToken>(); // 沿用你原有JsonConvert写法也兼容: // string contentStr = blobContent.ToString(); // Token result = JsonConvert.DeserializeObject<OAuthToken>(contentStr); return result; } catch (Exception e) { // 实现错误日志逻辑 throw; // 不建议吞异常,方便后续问题排查 } }
补充说明
- 如果是异步场景,换用
await blobClient.DownloadContentAsync()即可,其余逻辑一致。 - 上传Blob的时候建议显式设置ContentType为
application/json,避免后续其他业务逻辑读取时出现格式识别问题。 - 确认你的
OAuthToken类的属性名和JSON字段完全匹配,或者加JsonProperty属性做映射,避免反序列化时字段值为空。
内容的提问来源于stack exchange,提问作者USMC6072
相关产品推荐
相关产品推荐

