C# 在C中将数据对象导入/导出到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

是否有任何组件可以根据某些规则获取数据对象,并通过反射将其输出为CSV格式

例如,以下面的数据结构为例:

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.