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

UWP应用:如何将UploadPartResponse列表保存到文件并还原数据

嘿,我来帮你搞定这个问题!要把List<UploadPartResponse>持久化到文件,之后还能原样读回成原始类型,核心就是序列化与反序列化——把对象转换成可存储的格式,再逆向转回来。下面给你两种靠谱的方案,按需选择:

方案1:JSON序列化(首推)

JSON是轻量、易读且跨平台的格式,调试起来也方便,非常适合这种场景。你可以用主流的Newtonsoft.Json(Json.NET)或者.NET自带的System.Text.Json,这里以Newtonsoft.Json为例:

步骤1:安装依赖(如果用Newtonsoft.Json)

先在NuGet包管理器里安装:

Install-Package Newtonsoft.Json

步骤2:保存列表到文件

using Newtonsoft.Json;
using System.IO;

// 把上传响应序列化为JSON字符串,Formatting.Indented让JSON更易读
string jsonContent = JsonConvert.SerializeObject(uploadResponses, Formatting.Indented);
// 写入文件
File.WriteAllText("s3_upload_parts.json", jsonContent);

步骤3:从文件读回原始列表

// 读取文件内容
string jsonContent = File.ReadAllText("s3_upload_parts.json");
// 反序列化为原始的List<UploadPartResponse>
List<UploadPartResponse> restoredResponses = JsonConvert.DeserializeObject<List<UploadPartResponse>>(jsonContent);

注意事项

AWS的UploadPartResponse类本身就是为数据传输设计的,内部字段(比如PartNumber、ETag、LastModified)都是可序列化的基础类型,所以直接序列化没问题。如果遇到特殊字段无法序列化,你可以通过JsonSerializerSettings配置忽略或者自定义转换逻辑。

方案2:二进制序列化(性能优先场景)

如果追求极致性能,且不需要读取文件内容的可读性,可以用二进制序列化——直接把对象转成二进制流存储。不过这种方式仅适用于.NET环境,且依赖类的[Serializable]标记。

保存到文件

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

// 打开文件流,写入二进制数据
using (FileStream fs = new FileStream("s3_upload_parts.bin", FileMode.Create))
{
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(fs, uploadResponses);
}

从文件读回

List<UploadPartResponse> restoredResponses;
// 读取二进制文件并反序列化
using (FileStream fs = new FileStream("s3_upload_parts.bin", FileMode.Open))
{
    BinaryFormatter formatter = new BinaryFormatter();
    restoredResponses = (List<UploadPartResponse>)formatter.Deserialize(fs);
}

特殊情况处理

如果UploadPartResponse未标记[Serializable](虽然AWS SDK的类一般都有),你可以自己封装一个可序列化的DTO类来中转:

// 自定义可序列化的DTO,只保存需要的字段
[Serializable]
public class UploadPartResponseDto
{
    public int PartNumber { get; set; }
    public string ETag { get; set; }
    public DateTime LastModified { get; set; }
    // 其他你需要保留的字段
}

// 把原始列表转成DTO列表
var dtoList = uploadResponses.Select(resp => new UploadPartResponseDto
{
    PartNumber = resp.PartNumber,
    ETag = resp.ETag,
    LastModified = resp.LastModified
}).ToList();

// 序列化DTO列表(用上面的二进制序列化代码)
// ...

// 读取后再转回原始类型
var restoredDtoList = ...; // 读取的DTO列表
var restoredResponses = restoredDtoList.Select(dto => new UploadPartResponse
{
    PartNumber = dto.PartNumber,
    ETag = dto.ETag,
    LastModified = dto.LastModified
}).ToList();

内容的提问来源于stack exchange,提问作者Karel_cz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:29:49