csv 更改列的顺序
csv change order of the columns
我目前正在使用 ServiceStack.Text 从对象列表中序列化 CSV。
我有一个模型:
public class UploadDocument
{
[DataMember(Name = "Patient")]
public string Patient { get; set; }
[DataMember(Name = "Patient First Name")]
public string PatientFirstName { get; set; }
[DataMember(Name = "Patient Last Name")]
public string PatientLastName { get; set; }
[DataMember(Name = "Email")]
public string Email { get; set; }
}
结果是:
Patient, Patient First Name, Patient Last Name, Email
XXX, YYY, ZZZZZ, nwerwer@yahoo.com,
XXX, YYY, ZZZZZ, nwerwerwe@yahoo.com,
XXX, YYY, ZZZZZ, nwerwe@yahoo.com,
但是,对于另一份报告,我需要更改 csv 和 return:
的顺序
Email, Patient, Patient First Name, Patient Last Name,
nwerwer@yahoo.com, XXX, YYY, ZZZZZ,
nwerwerwe@yahoo.com, XXX, YYY, ZZZZZ,
nwerwe@yahoo.com, XXX, YYY, ZZZZZ,
有没有办法避免创建新模型?
您可以使用订单选项。
前任:
[DataMember(订单 = 0)]
文档位于 link:
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-member-order
在 CustomHeaderTests.cs 中有一些设置自定义 Headers 的示例,您可以在其中覆盖序列化的 CSV Headers。注意:这是静态配置,应该在启动时初始化一次,因为它不是线程安全的,无法在运行时进行变异。
但我个人会定义一个单独的模型,其中包含您想要的 headers 的顺序和数量,您不应该将其视为重复代码,您在每个 [= 中以声明方式定义您想要的结构23=] 比在运行时修改序列化实现更易于维护。
要在模型之间进行映射,您可以使用 ServiceStack 的 AutoMapping Utils,例如:
var report2 = report1.ConvertTo<List<Report2Document>>();
另一种避免定义模型的解决方案是 convert the model to an Object Dictionary,按照您想要的顺序将每个字典转换为 List<KeyValuePair<string,string>>
并序列化它。
我目前正在使用 ServiceStack.Text 从对象列表中序列化 CSV。 我有一个模型:
public class UploadDocument
{
[DataMember(Name = "Patient")]
public string Patient { get; set; }
[DataMember(Name = "Patient First Name")]
public string PatientFirstName { get; set; }
[DataMember(Name = "Patient Last Name")]
public string PatientLastName { get; set; }
[DataMember(Name = "Email")]
public string Email { get; set; }
}
结果是:
Patient, Patient First Name, Patient Last Name, Email
XXX, YYY, ZZZZZ, nwerwer@yahoo.com,
XXX, YYY, ZZZZZ, nwerwerwe@yahoo.com,
XXX, YYY, ZZZZZ, nwerwe@yahoo.com,
但是,对于另一份报告,我需要更改 csv 和 return:
的顺序Email, Patient, Patient First Name, Patient Last Name,
nwerwer@yahoo.com, XXX, YYY, ZZZZZ,
nwerwerwe@yahoo.com, XXX, YYY, ZZZZZ,
nwerwe@yahoo.com, XXX, YYY, ZZZZZ,
有没有办法避免创建新模型?
您可以使用订单选项。 前任: [DataMember(订单 = 0)]
文档位于 link: https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-member-order
在 CustomHeaderTests.cs 中有一些设置自定义 Headers 的示例,您可以在其中覆盖序列化的 CSV Headers。注意:这是静态配置,应该在启动时初始化一次,因为它不是线程安全的,无法在运行时进行变异。
但我个人会定义一个单独的模型,其中包含您想要的 headers 的顺序和数量,您不应该将其视为重复代码,您在每个 [= 中以声明方式定义您想要的结构23=] 比在运行时修改序列化实现更易于维护。
要在模型之间进行映射,您可以使用 ServiceStack 的 AutoMapping Utils,例如:
var report2 = report1.ConvertTo<List<Report2Document>>();
另一种避免定义模型的解决方案是 convert the model to an Object Dictionary,按照您想要的顺序将每个字典转换为 List<KeyValuePair<string,string>>
并序列化它。