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

Commit f266f9b

Browse files
committed
Also use CustomHeadersMap when deserializing
1 parent a4fbc7d commit f266f9b

File tree

4 files changed

+37
-9
lines changed

4 files changed

+37
-9
lines changed

src/ServiceStack.Text/CsvReader.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,22 @@ internal static void ConfigureCustomHeaders(Dictionary<string, string> customHea
241241
for (var i = Headers.Count - 1; i >= 0; i--)
242242
{
243243
var oldHeader = Headers[i];
244-
string newHeaderValue;
245-
if (!customHeadersMap.TryGetValue(oldHeader, out newHeaderValue))
244+
if (!customHeadersMap.TryGetValue(oldHeader, out var newHeader))
246245
{
247246
Headers.RemoveAt(i);
248247
PropertySetters.RemoveAt(i);
249248
}
250249
else
251250
{
252-
Headers[i] = newHeaderValue.EncodeJsv();
251+
Headers[i] = newHeader;
252+
253+
PropertySettersMap.TryGetValue(oldHeader, out var setter);
254+
PropertySettersMap.Remove(oldHeader);
255+
PropertySettersMap[newHeader] = setter;
256+
257+
PropertyConvertersMap.TryGetValue(oldHeader, out var converter);
258+
PropertyConvertersMap.Remove(oldHeader);
259+
PropertyConvertersMap[newHeader] = converter;
253260
}
254261
}
255262
}

src/ServiceStack.Text/CsvSerializer.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ internal static WriteObjectDelegate GetWriteFn(Type type)
2121
{
2222
try
2323
{
24-
WriteObjectDelegate writeFn;
25-
if (WriteFnCache.TryGetValue(type, out writeFn)) return writeFn;
24+
if (WriteFnCache.TryGetValue(type, out var writeFn)) return writeFn;
2625

2726
var genericType = typeof(CsvSerializer<>).MakeGenericType(type);
2827
var mi = genericType.GetStaticMethod("WriteFn");
@@ -55,8 +54,7 @@ internal static ParseStringDelegate GetReadFn(Type type)
5554
{
5655
try
5756
{
58-
ParseStringDelegate writeFn;
59-
if (ReadFnCache.TryGetValue(type, out writeFn)) return writeFn;
57+
if (ReadFnCache.TryGetValue(type, out var writeFn)) return writeFn;
6058

6159
var genericType = typeof(CsvSerializer<>).MakeGenericType(type);
6260
var mi = genericType.GetStaticMethod("ReadFn");

src/ServiceStack.Text/CsvWriter.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,7 @@ internal static void ConfigureCustomHeaders(Dictionary<string, string> customHea
183183
for (var i = Headers.Count - 1; i >= 0; i--)
184184
{
185185
var oldHeader = Headers[i];
186-
string newHeaderValue;
187-
if (!customHeadersMap.TryGetValue(oldHeader, out newHeaderValue))
186+
if (!customHeadersMap.TryGetValue(oldHeader, out var newHeaderValue))
188187
{
189188
Headers.RemoveAt(i);
190189
PropertyGetters.RemoveAt(i);

tests/ServiceStack.Text.Tests/CsvTests/CustomHeaderTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,30 @@ public void Can_serialize_partial_custom_headers_map()
9191
));
9292
}
9393

94+
[Test]
95+
public void Can_deserialize_partial_custom_headers_map()
96+
{
97+
CsvConfig<TableItem>.CustomHeadersMap = new Dictionary<string, string> {
98+
{"Column1Data", "Column 1"},
99+
{"Column3Data", "Column,3"},
100+
{"Column5Data", "Column 5"},
101+
};
102+
103+
var csv = "Column 1,\"Column,3\",Column 5\r\n"
104+
+ "I,To,Novels\r\n"
105+
+ "I am,Cool,Awesome\r\n";
106+
107+
var data = CsvSerializer.DeserializeFromString<List<TableItem>>(csv);
108+
109+
Assert.That(data[0].Column1Data, Is.EqualTo("I"));
110+
Assert.That(data[0].Column3Data, Is.EqualTo("To"));
111+
Assert.That(data[0].Column5Data, Is.EqualTo("Novels"));
112+
113+
Assert.That(data[1].Column1Data, Is.EqualTo("I am"));
114+
Assert.That(data[1].Column3Data, Is.EqualTo("Cool"));
115+
Assert.That(data[1].Column5Data, Is.EqualTo("Awesome"));
116+
}
117+
94118
[Test]
95119
public void Can_serialize_without_headers()
96120
{

0 commit comments

Comments
 (0)