Skip to content

Commit 5aa5831

Browse files
committed
Merge pull request mcintyre321#85 from sonofaforester/patch-1
Override default serialization
2 parents 1dc1953 + dd45a55 commit 5aa5831

File tree

1 file changed

+25
-23
lines changed

1 file changed

+25
-23
lines changed

Mvc.JQuery.Datatables/StringTransformers.cs

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,43 @@
55

66
namespace Mvc.JQuery.Datatables
77
{
8-
static class StringTransformers
8+
public static class StringTransformers
99
{
1010
internal static object GetStringedValue(Type propertyType, object value)
1111
{
12-
foreach (var transformer in Transformers)
13-
{
14-
var result = transformer(propertyType, value);
15-
if (result != null) return result;
16-
}
12+
if (Transformers.ContainsKey(propertyType))
13+
return Transformers[propertyType](propertyType, value);
1714
return (value as object ?? "").ToString();
1815
}
19-
private static readonly List<StringTransformer> Transformers = new List<StringTransformer>()
16+
17+
static StringTransformers()
2018
{
21-
Guard<DateTimeOffset>(dateTimeOffset => dateTimeOffset.ToLocalTime().ToString("g")),
22-
Guard<DateTime>(dateTime => dateTime.ToLocalTime().ToString("g")),
23-
Guard<IHtmlString>(s => s.ToHtmlString()),
24-
Guard<IEnumerable<string>>(s => s.ToArray()),
25-
Guard<IEnumerable<int>>(s => s.ToArray()),
26-
Guard<IEnumerable<long>>(s => s.ToArray()),
27-
Guard<IEnumerable<decimal>>(s => s.ToArray()),
28-
Guard<IEnumerable<bool>>(s => s.ToArray()),
29-
Guard<IEnumerable<double>>(s => s.ToArray()),
30-
Guard<IEnumerable<object>>(s => s.Select(o => GetStringedValue(o.GetType(), o)).ToArray()),
31-
Guard<bool>(s => s),
32-
Guard<object>(o => (o ?? "").ToString())
33-
};
19+
RegisterFilter<DateTimeOffset>(dateTimeOffset => dateTimeOffset.ToLocalTime().ToString("g"));
20+
RegisterFilter<DateTime>(dateTime => dateTime.ToString("g"));
21+
RegisterFilter<IHtmlString>(s => s.ToHtmlString());
22+
RegisterFilter<IEnumerable<string>>(s => s.ToArray());
23+
RegisterFilter<IEnumerable<int>>(s => s.ToArray());
24+
RegisterFilter<IEnumerable<long>>(s => s.ToArray());
25+
RegisterFilter<IEnumerable<decimal>>(s => s.ToArray());
26+
RegisterFilter<IEnumerable<bool>>(s => s.ToArray());
27+
RegisterFilter<IEnumerable<double>>(s => s.ToArray());
28+
RegisterFilter<IEnumerable<object>>(s => s.Select(o => GetStringedValue(o.GetType(), o)).ToArray());
29+
RegisterFilter<bool>(s => s);
30+
RegisterFilter<object>(o => (o ?? "").ToString());
31+
}
3432

35-
public delegate object GuardedValueTransformer<TVal>(TVal value);
33+
private static readonly Dictionary<Type, StringTransformer> Transformers = new Dictionary<Type, StringTransformer>();
3634

35+
public delegate object GuardedValueTransformer<TVal>(TVal value);
3736

3837
public delegate object StringTransformer(Type type, object value);
3938

4039
public static void RegisterFilter<TVal>(GuardedValueTransformer<TVal> filter)
4140
{
42-
Transformers.Add(Guard<TVal>(filter));
41+
if (Transformers.ContainsKey(typeof(TVal)))
42+
Transformers[typeof(TVal)] = Guard(filter);
43+
else
44+
Transformers.Add(typeof(TVal), Guard(filter));
4345
}
4446

4547
private static StringTransformer Guard<TVal>(GuardedValueTransformer<TVal> transformer)
@@ -64,4 +66,4 @@ public static Dictionary<string, object> TransformDictionary(Dictionary<string,
6466
return output;
6567
}
6668
}
67-
}
69+
}

0 commit comments

Comments
 (0)