CsvHelper可以处理“ [[0,0],[100,100]]”之类的数据吗?

时间:2019-10-10 09:43:44

标签: csvhelper

我想处理[[0,0],[100,100]]之类的数据,但是我不知道如何使用CsvHelper来做到这一点。我定义为float[][]CsvReader返回null,那么正确的事情是什么?

1 个答案:

答案 0 :(得分:0)

此数据不是csv。 CsvHelper会尝试像"[[0""0]""[100""100]]"那样解析它。您可以使用Newtonsoft.Json Nuget包对其进行反序列化。

var data = "[[0,0],[100,100]]";

float[][] result = JsonConvert.DeserializeObject<float[][]>(data);

@John很好。这可能是CSV文件中单元格内的数据。在这种情况下,ClassMap可能是一个不错的选择。

public class Program
{
    public static void Main(string[] args)
    {
        using (MemoryStream stream = new MemoryStream())
        using (StreamWriter writer = new StreamWriter(stream))
        using (StreamReader reader = new StreamReader(stream))
        using (CsvReader csv = new CsvReader(reader))
        {
            writer.WriteLine("Id,Data");
            writer.WriteLine("1,\"[[0,0],[100,100]]\"");
            writer.Flush();
            stream.Position = 0;

            csv.Configuration.RegisterClassMap<FooMap>();

            var results = csv.GetRecords<Foo>().ToList();
        }  
    }
}

public class Foo
{
    public int Id { get; set; }
    public float[][] Data { get; set; }
}

public class FooMap : ClassMap<Foo>
{
    public FooMap()
    {
        Map(m => m.Id);
        Map(m => m.Data).ConvertUsing(row => JsonConvert.DeserializeObject<float[][]>(row.GetField("Data")));
    }
}