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

如何将C#模型集合转置为竖表头横值的CSV格式

如何将C#模型集合转换为左侧表头、值横向排列的CSV格式

要把List<Header>这类模型集合转换成表头在左侧、对应值横向排列的CSV,核心思路是通过反射获取模型属性,再按属性遍历生成每行内容。以下是具体实现:

完整代码示例

using System;
using System.Collections.Generic;
using System.Reflection;

public record Header 
{  
    public string BlNo;  
    public string Descr;  
    public int sigVal; 
}

class Program
{
    static void Main()
    {
        var header = new Header { BlNo = "001", Descr = "test1", sigVal = 34 };
        var header2 = new Header { BlNo = "002", Descr = null, sigVal = 38 };
        var header3 = new Header { BlNo = "003", Descr = "test3", sigVal = 25 };
        var headers = new List<Header> { header, header2, header3 };

        // 获取模型的所有公共实例属性
        var properties = typeof(Header).GetProperties(BindingFlags.Public | BindingFlags.Instance);
        var csvLines = new List<string>();

        foreach (var prop in properties)
        {
            // 每行开头留空,接着是属性名
            var lineSegments = new List<string> { "", prop.Name };
            
            foreach (var item in headers)
            {
                var value = prop.GetValue(item);
                string formattedValue;
                
                if (value == null)
                {
                    formattedValue = "";
                }
                else if (value is string str)
                {
                    // 转义字符串中的双引号,符合CSV标准格式
                    formattedValue = $"\"{str.Replace("\"", "\"\"")}\"";
                }
                else
                {
                    // 非字符串类型直接转为字符串
                    formattedValue = value.ToString();
                }
                
                lineSegments.Add(formattedValue);
            }
            
            csvLines.Add(string.Join(",", lineSegments));
        }

        // 生成最终CSV内容并输出
        var csvResult = string.Join(Environment.NewLine, csvLines);
        Console.WriteLine(csvResult);
    }
}

运行结果

运行上述代码后,会输出符合需求的CSV内容:

,BlNo,"001","002","003"
,Descr,"test1",,"test3"
,sigVal,34,38,25

关键细节说明

  • 反射获取属性:通过typeof(Header).GetProperties()获取模型的所有公共实例属性,无需硬编码属性名,适配模型变更。
  • 值格式化:
    • 空值直接输出空字符串
    • 字符串用双引号包裹,同时将字符串内部的双引号替换为两个双引号(CSV标准转义规则),避免解析错误
    • 数值等非字符串类型直接转字符串输出
  • 扩展适配:如果需要处理更多数据类型(如DateTime、decimal),可在值格式化逻辑中添加对应类型的处理代码,定制输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:29:51