2016-04-25 9 views
1

Ich versuche, ServiceStack.Text für das Deserialisieren einer CSV-Datei zu verwenden, die ";" enthält als der Separator.CSV mit ServiceStack.Text deserialisieren

Der Test csv enthält diese Daten

--------------- 
| Col1 | Col2 | 
--------------- 
| Val1 | Val2 | 
--------------- 
| Val3 | Val4 | 
--------------- 

public class Line 
{ 
    public string Col1 { get; set; } 
    public string Col2 { get; set; } 
} 

Der Code, der funktioniert:

var CsvWithComma = "Col1,Col2" + Environment.NewLine + 
"Val1,Val2" + Environment.NewLine + 
"Val3,Val3" + Environment.NewLine; 

var r1 = ServiceStack.Text.CsvSerializer.DeserializeFromString<List<Line>>(CsvWithComma); 

Assert.That(r1.Count() == 2, "It should be 2 rows"); 
Assert.That(r1[0].Col1 == "Val1", "Expected Val1"); 
Assert.That(r1[0].Col2 == "Val2", "Expected Val2"); 

Der Code, der fehlschlägt:

ServiceStack.Text.CsvConfig.ItemSeperatorString = ";"; 

var CsvWithSemicolon = "Col1;Col2" + Environment.NewLine + 
"Val1;Val2" + Environment.NewLine + 
"Val3;Val3" + Environment.NewLine; 

var r2 = ServiceStack.Text.CsvSerializer.DeserializeFromString<List<Line>>(CsvWithSemicolon); 

Assert.That(r2.Count() == 2, "It should be 2 rows"); 
Assert.That(r2[0].Col1 == "Val1", "Expected Val1"); 
Assert.That(r2[0].Col2 == "Val2", "Expected Val2"); 

Als ich in den ServiceStack Code graben wird, scheint als würde es den ServiceStack.Text.Common.JsWriter.ItemSeperator als Trennzeichen für den CSV-Reader und nicht den Servi verwenden ceStack.Text.CsvConfig.ItemSeperatorString.

Hat jemand das funktioniert?

Antwort