C# 在C中将数据对象导入/导出到CSV#
是否有任何组件可以根据某些规则获取数据对象,并通过反射将其输出为CSV格式 例如,以下面的数据结构为例:C# 在C中将数据对象导入/导出到CSV#,c#,csv,serialization,export,C#,Csv,Serialization,Export,是否有任何组件可以根据某些规则获取数据对象,并通过反射将其输出为CSV格式 例如,以下面的数据结构为例: Member ------ Name : string Surname : string ContactDetails : ContactDetails ContactDetails -------------- Address1 : string Address2 : string City : string Telephone : st
Member
------
Name : string
Surname : string
ContactDetails : ContactDetails
ContactDetails
--------------
Address1 : string
Address2 : string
City : string
Telephone : string
如果必须将成员
导出到CSV,则会产生以下几列:
- 名字
- 姓
- ContactDetails.Address1
- ContactDetails.Address2
- 联系方式。城市
- 联系方式。电话
这也可以反过来进行,通过反射将CSV文件转换回数据对象。好的,这就是我要做的,以创建基于反射的CSV。我会将对象序列化为XML,然后使用XSLT将结果XML转换为CSV:
namespace ConsoleApplication1
{
[XmlRoot(ElementName = "Players")]
public class Players : System.Collections.Generic.List<Player> {
public Players() { }
}
public class Player{
public string Name { get; set; }
public string Team { get; set; }
public string Position { get; set; }
public Player(string name, string position, string team) {
this.Name = name;
this.Position = position;
this.Team = team;
}
public Player() { }
}
[System.Runtime.InteropServices.GuidAttribute("D36900FE-8902-4ED8-B961-DE5B3F3273AC")]
class Program
{
static void Main(string[] args)
{
Players players= new Players();
players.Add(new Player("C.Ronaldo", "Man Utd", "Midfielder"));
XmlSerializer ser = new XmlSerializer(typeof(Players));
var writer = new System.IO.StreamWriter(@"C:\myxml.xml", false);
ser.Serialize(writer, players);
writer.Flush();
writer.Close();
var myXslTrans = new XslCompiledTransform();
myXslTrans.Load(@"C:\CSV.xslt", null, null );
myXslTrans.Transform(@"file://C:/myxml.xml", @"C:\converted.csv");
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:telerik="remove" xmlns:asp="remove">
<xsl:template match="/">
<xsl:for-each select="Players/Player">
<xsl:value-of select="Name" />,<xsl:value-of select="Team" />,<xsl:value-of select="Position" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
I know the XSLT needs break lines or may need additional formats. I only intent to describe a possible path to CSV/Reflection and not a fully working solution.