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

能否无需本地临时文件将C#模型转为XML并上传至FTP服务器?

无需本地临时文件将C#模型转XML并上传FTP的实现方法

当然可以实现,核心思路是用**内存流(MemoryStream)**作为中转,完全不需要创建本地临时文件。结合XmlSerializer和FluentFTP就能轻松完成,具体实现步骤和代码如下:

实现步骤

  • 定义可序列化的C#模型类
  • 使用XmlSerializer将模型直接序列到MemoryStream中
  • 重置内存流的位置到起始处(否则FTP上传会读取空内容)
  • 通过FluentFTP的Upload方法,将内存流直接上传到FTP服务器

完整代码示例

1. 定义可序列化的模型类

// 示例模型类,XmlSerializer默认支持公共属性序列化,标记[Serializable]更稳妥
[Serializable]
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

2. 核心序列化与上传逻辑

using System.IO;
using System.Xml.Serialization;
using FluentFTP;

// 初始化模型实例
var product = new Product { Id = 1, Name = "Sample Product", Price = 99.99m };

// 创建XmlSerializer实例
var serializer = new XmlSerializer(typeof(Product));

// 用MemoryStream作为中转容器,无需本地文件
using var memoryStream = new MemoryStream();

// 将模型序列到内存流
serializer.Serialize(memoryStream, product);

// 重置流的位置到开头,否则FTP读取时会从流末尾开始,导致上传空文件
memoryStream.Position = 0;

// 配置FTP连接参数
var ftpClient = new FtpClient("ftp.example.com", "your-ftp-username", "your-ftp-password");

try
{
    // 连接FTP服务器
    ftpClient.Connect();

    // 直接上传内存流到指定FTP路径
    // 指定Binary传输模式,避免XML内容因ASCII模式的换行符转换出现异常
    ftpClient.Upload(
        memoryStream, 
        "/remote-directory/product.xml", 
        FtpLocalExists.Overwrite, 
        FtpVerify.None, 
        FtpTransferType.Binary
    );

    Console.WriteLine("XML文件上传成功");
}
catch (Exception ex)
{
    Console.WriteLine($"上传失败:{ex.Message}");
}
finally
{
    // 确保断开FTP连接,释放资源
    if (ftpClient.IsConnected)
    {
        ftpClient.Disconnect();
    }
}

注意事项

  • 模型类的公共属性会被自动序列化,若需排除特定属性可使用[XmlIgnore]特性
  • 上传时务必指定FtpTransferType.Binary,避免XML内容的编码或格式被修改
  • 记得处理FTP连接失败、权限不足、网络中断等异常情况
  • 使用using语句确保MemoryStream和FtpClient自动释放资源,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:53:11