Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 8697e4e

Browse files
committed
Change Csv Serializer to use CsvConfig
1 parent 82d650a commit 8697e4e

File tree

4 files changed

+63
-10
lines changed

4 files changed

+63
-10
lines changed

src/ServiceStack.Text/CsvWriter.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Linq;
5-
using System.Runtime.Serialization;
6-
using System.Reflection;
75
using ServiceStack.Text.Common;
86
using ServiceStack.Text.Reflection;
97

@@ -28,11 +26,11 @@ public static void WriteObjectRow(TextWriter writer, IEnumerable<object> row)
2826
var ranOnce = false;
2927
foreach (var field in row)
3028
{
31-
JsWriter.WriteItemSeperatorIfRanOnce(writer, ref ranOnce);
29+
CsvWriter.WriteItemSeperatorIfRanOnce(writer, ref ranOnce);
3230

3331
writer.Write(field.ToCsvField());
3432
}
35-
writer.WriteLine();
33+
writer.Write(CsvConfig.RowSeparatorString);
3634
}
3735

3836
public static void Write(TextWriter writer, IEnumerable<Dictionary<string, object>> records)
@@ -298,7 +296,7 @@ public static void WriteRow(TextWriter writer, IEnumerable<string> row)
298296

299297
writer.Write(field.ToCsvField());
300298
}
301-
writer.WriteLine();
299+
writer.Write(CsvConfig.RowSeparatorString);
302300
}
303301

304302
public static void Write(TextWriter writer, IEnumerable<List<string>> rows)

src/ServiceStack.Text/TextExtensions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ public static string ToCsvField(this string text)
3333

3434
public static object ToCsvField(this object text)
3535
{
36-
return text == null || !JsWriter.HasAnyEscapeChars(text.ToString())
36+
return text == null || !CsvWriter.HasAnyEscapeChars(text.ToString())
3737
? text
3838
: string.Concat
3939
(
40-
JsWriter.QuoteString,
41-
text.ToString().Replace(JsWriter.QuoteString, TypeSerializer.DoubleQuoteString),
42-
JsWriter.QuoteString
40+
CsvConfig.ItemDelimiterString,
41+
text.ToString().Replace(CsvConfig.ItemDelimiterString, CsvConfig.EscapedItemDelimiterString),
42+
CsvConfig.ItemDelimiterString
4343
);
4444
}
4545

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Text;
5+
using NUnit.Framework;
6+
using ServiceStack.Common.Tests.Models;
7+
using ServiceStack.Text.Common;
8+
9+
namespace ServiceStack.Text.Tests
10+
{
11+
[TestFixture]
12+
public class CsvSerializerConfigTests
13+
{
14+
[Test]
15+
public void Does_use_CsvConfig()
16+
{
17+
CsvConfig.ItemSeperatorString = "|";
18+
CsvConfig.ItemDelimiterString = "`";
19+
CsvConfig.RowSeparatorString = "\n\n";
20+
21+
var dtos = new[] {
22+
new ModelWithIdAndName { Id = 1, Name = "Value" },
23+
new ModelWithIdAndName { Id = 2, Name = "Value|Escaped" },
24+
};
25+
26+
var csv = dtos.ToCsv();
27+
csv.Print();
28+
Assert.That(csv, Is.EqualTo("Id|Name\n\n1|Value\n\n2|`Value|Escaped`\n\n"));
29+
30+
var maps = new List<Dictionary<string, object>>()
31+
{
32+
new Dictionary<string,object> { {"Id", "1"}, {"Name", "Value"} },
33+
new Dictionary<string,object> { {"Id", "2"}, {"Name", "Value|Escaped"} },
34+
};
35+
36+
csv = maps.ToCsv();
37+
csv.Print();
38+
Assert.That(csv, Is.EqualTo("Id|Name\n\n1|Value\n\n2|`Value|Escaped`\n\n"));
39+
40+
CsvConfig.ItemSeperatorString = JsWriter.ItemSeperatorString;
41+
CsvConfig.ItemDelimiterString = JsWriter.QuoteString;
42+
CsvConfig.RowSeparatorString = Environment.NewLine;
43+
}
44+
45+
[Test]
46+
public void Does_use_CsvConfig_for_Dictionary_object()
47+
{
48+
CsvConfig.ItemSeperatorString = "|";
49+
CsvConfig.ItemDelimiterString = "`";
50+
CsvConfig.RowSeparatorString = "\n\n";
51+
52+
}
53+
}
54+
}

tests/ServiceStack.Text.Tests/ServiceStack.Text.Tests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@
183183
<Compile Include="AutoMappingTests.cs" />
184184
<Compile Include="BasicStringSerializerTests.cs" />
185185
<Compile Include="BclStructTests.cs" />
186+
<Compile Include="CsvSerializerConfigTests.cs" />
186187
<Compile Include="CsvTests\DictionaryTests.cs" />
187188
<Compile Include="CyclicalDependencyTests.cs" />
188189
<Compile Include="DateTimeExtensionsTests.cs" />
@@ -352,4 +353,4 @@
352353
<Target Name="AfterBuild">
353354
</Target>
354355
-->
355-
</Project>
356+
</Project>

0 commit comments

Comments
 (0)