将对象序列化为自定义字符串格式以在输出文件中使用的最佳实践

2024-05-07

我正要在特定的业务类上实现 ToString() 的重写,以便生成 Excel 友好的格式来写入输出文件,稍后将拾取并处理该输出文件。数据应如下所示:

5555555 "LASTN SR, FIRSTN"  5555555555  13956 STREET RD     TOWNSVILLE  MI  48890   25.88   01-003-06-0934

对我来说,只需制作一个格式字符串并覆盖就没什么大不了的ToString(),但这会改变的行为ToString()对于任何对象,我决定以这种方式序列化,从而实现ToString()整个图书馆都衣衫褴褛。

现在,我一直在阅读格式提供者 http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx,一个实现它的类听起来是个好主意,但我仍然对所有这些逻辑应该驻留在哪里以及如何构建格式化程序类感到有点困惑。

当您需要从对象中创建 CSV、制表符分隔或其他非 XML 任意字符串时,你们会怎么做?


以下是使用反射从对象列表创建 CSV 的通用方式:

public static string ToCsv<T>(string separator, IEnumerable<T> objectlist)
{
    Type t = typeof(T);
    FieldInfo[] fields = t.GetFields();

    string header = String.Join(separator, fields.Select(f => f.Name).ToArray());

    StringBuilder csvdata = new StringBuilder();
    csvdata.AppendLine(header);

    foreach (var o in objectlist) 
        csvdata.AppendLine(ToCsvFields(separator, fields, o));

    return csvdata.ToString();
}

public static string ToCsvFields(string separator, FieldInfo[] fields, object o)
{
    StringBuilder linie = new StringBuilder();

    foreach (var f in fields)
    {
        if (linie.Length > 0)
            linie.Append(separator);

        var x = f.GetValue(o);

        if (x != null)
            linie.Append(x.ToString());
    }

    return linie.ToString();
}

可以进行许多变体,例如直接在 ToCsv() 中写入文件,或者用 IEnumerable 和yield 语句替换 StringBuilder。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将对象序列化为自定义字符串格式以在输出文件中使用的最佳实践 的相关文章

随机推荐

  • 扩展 SimpleJpaRepository

    当我想扩展时我正在使用 Spring BootSimpleJpaRepository像这样的界面 public interface BaseRepository
  • 通过端点 API 将图像读入 protorpc 消息

    将用户的图片接收到我的 endpoints method我用吗messages BytesField as in image messages BytesField 1 stuff messages StringField 2 是的 这是正
  • 使用facet_grid从ggplot中提取单个图

    我想使用 ggplot 和生成一些图facet grid并将绘图保存为对象 我的问题是我还想将每个子组 即每个方面 单独保存为一个对象 我现在的问题是你是否可以从中提取一个方面facet grid并将其保存为对象 这是一些简单的代码 lib
  • 浮点舍入效果说明

    include
  • 在字段解析器上从父节点获取数据

    所以我想做的是GraphQL如果可能的话像这样 people id name acted id title coactors name 所以我正在做的就是找演员 人 然后找他们演的电影 效果很好 所以我正在努力寻找那部电影的合作演员 我正在
  • Auth0 - 无法检索远程 JWK 设置:读取超时

    我正在遭受这一痛苦 无法检索远程 JWK 设置 读取超时 我正在使用 Java 11 和 Spring boot 2 5 3 对于依赖项 弹簧安全 oauth2 何塞 5 5 1 spring boot starter oauth2 客户端
  • 如何将带小数点的字符串解析为双精度型?

    我想解析一个字符串 3 5 到一个双倍 然而 double Parse 3 5 产量 35 和 double Parse 3 5 System Globalization NumberStyles AllowDecimalPoint 抛出一
  • Spring AOP生成的代理类的位置

    只是为了学习和理解代理 我想看看Spring AOP生成的代理类 它不存在于 Eclipse 生成的类文件夹中 有人可以告诉我它的位置吗 如果您使用基于接口的代理 默认 Spring 使用Proxy http docs oracle com
  • IOS 7 UITextField resignFirstResponder 坏

    当我在自定义单元格内使用 UItextField 时 以及当我 resignFirstResponder 文本字段时 我发生崩溃 但它不再可见 表视图滚动到窗口外 我仍然可以找到文本字段 指针继续可访问 它不为空 并且崩溃仅发生在 IOS7
  • WebKit 是否使用 OpenGL 来渲染 CSS 过渡?

    WebKit 是使用 OpenGL 来渲染 CSS 过渡 还是使用软件渲染 WebKit 只是一个前端 这取决于后端和硬件支持 谷歌浏览器使用skia http code google com p skia 作为后端 它可以使用软件或硬件
  • 格式化 mlogit 的数据

    为了通过 mlogit 进行多项 Logit 分析 我正在经历一段艰难的时间来整理我的数据集 我的数据集可从url https raw githubusercontent com sjkiss Survey master mlogit ou
  • 使用三元运算符“不执行任何操作”[重复]

    这个问题在这里已经有答案了 我想像这样使用三元运算符 仅检查true声明的一部分 foo bar Do nothing 是否可以排除该语句的 else 部分的逻辑 我尝试使用return 但编译器给出了错误 基本上我想要实现的是使用三元运算
  • 具有多个输入的 Keras TimeDistributed 层

    我正在尝试使以下代码行正常工作 low encoder out TimeDistributed AutoregressiveDecoder X tf embeddings Where AutoregressiveDecoder是一个需要两个
  • 使用 'gitbranch' 命令显示当前 git 分支

    我在处理太多分支时遇到问题 需要花费很多时间才能找到我现在正在处理的当前分支 有没有办法在使用时显示的列表顶部列出当前分支git branch命令 如果您只想要签出分支 请使用git branch show current
  • 在 git 中编辑分支?

    我在 github 网站上创建了一个分支 该分支不在我的本地存储库中 如何将该分支带到我的本地计算机 对其进行编辑 然后将其推送回我的 github 帐户 在本地工作目录中输入 git fetch origin newbranch git
  • Android FAB 图标始终为黑色,带有 MaterialComponents 主题

    我正在创建一个 Android 应用程序 并使用 AndroidX 库和 Material design 主题 我的应用程序主题为styles xml is 我有来自自定义库的以下 F
  • iOS 中 NSNotificationCenter 的 if 语句

    我正在尝试在一个动画结束时开始另一个动画 我正在检查这样的回调 NSNotificationCenter defaultCenter addObserver self selector selector animationDidStopNo
  • 设置rgl设备的大小

    我的 rgl 设备的全屏 非全屏有问题 目前我使用R 3 00 我将 persp3d 图 库 rgl 绘制到我的设备中 它在一个非常小的窗口中打开 R代码 persp3d x y z theta 50 phi 25 expand 0 75
  • 如何使用 git-svn 使 svn:external 保持最新?

    将我的存储库视为 SVN 存储库 我得到 svn co http myrepo foo trunk foo foo bar baz gt http myrepo baz trunk 将其视为 Git 存储库 我得到 git svn clon
  • 将对象序列化为自定义字符串格式以在输出文件中使用的最佳实践

    我正要在特定的业务类上实现 ToString 的重写 以便生成 Excel 友好的格式来写入输出文件 稍后将拾取并处理该输出文件 数据应如下所示 5555555 LASTN SR FIRSTN 5555555555 13956 STREET