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
相关产品推荐
相关产品推荐

