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

Commit 781432a

Browse files
committed
Add OnSerialize event on JSON, JSV & CSV Serializers
1 parent 206032f commit 781432a

File tree

5 files changed

+15
-0
lines changed

5 files changed

+15
-0
lines changed

src/ServiceStack.Text/CsvSerializer.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public class CsvSerializer
1717
//Don't emit UTF8 BOM by default
1818
public static Encoding UseEncoding { get; set; } = PclExport.Instance.GetUTF8Encoding(false);
1919

20+
public static Action<object> OnSerialize { get; set; }
21+
2022
private static Dictionary<Type, WriteObjectDelegate> WriteFnCache = new Dictionary<Type, WriteObjectDelegate>();
2123
internal static WriteObjectDelegate GetWriteFn(Type type)
2224
{
@@ -394,6 +396,7 @@ public static void WriteObject(TextWriter writer, object value)
394396
JsState.IsCsv = true;
395397
try
396398
{
399+
CsvSerializer.OnSerialize?.Invoke(value);
397400
WriteCacheFn(writer, value);
398401
}
399402
finally

src/ServiceStack.Text/Json/JsonWriter.Generic.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ public static void WriteObject(TextWriter writer, object value)
215215
public static void WriteRootObject(TextWriter writer, object value)
216216
{
217217
TypeConfig<T>.Init();
218+
JsonSerializer.OnSerialize?.Invoke(value);
218219

219220
JsState.Depth = 0;
220221
CacheFn(writer, value);

src/ServiceStack.Text/JsonSerializer.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ public static UTF8Encoding UTF8Encoding
4040
set => JsConfig.UTF8Encoding = value;
4141
}
4242

43+
public static Action<object> OnSerialize { get; set; }
44+
4345
public static T DeserializeFromString<T>(string value)
4446
{
4547
return JsonReader<T>.Parse(value) is T obj ? obj : default(T);
@@ -112,6 +114,7 @@ public static string SerializeToString(object value, Type type)
112114
}
113115
else
114116
{
117+
OnSerialize?.Invoke(value);
115118
JsonWriter.GetWriteFn(type)(writer, value);
116119
}
117120
return StringWriterThreadStatic.ReturnAndFree(writer);
@@ -149,6 +152,7 @@ public static void SerializeToWriter(object value, Type type, TextWriter writer)
149152
return;
150153
}
151154

155+
OnSerialize?.Invoke(value);
152156
JsonWriter.GetWriteFn(type)(writer, value);
153157
}
154158

@@ -175,6 +179,7 @@ public static void SerializeToStream<T>(T value, Stream stream)
175179

176180
public static void SerializeToStream(object value, Type type, Stream stream)
177181
{
182+
OnSerialize?.Invoke(value);
178183
var writer = new StreamWriter(stream, JsConfig.UTF8Encoding, BufferSize, leaveOpen:true);
179184
JsonWriter.GetWriteFn(type)(writer, value);
180185
writer.Flush();

src/ServiceStack.Text/Jsv/JsvWriter.Generic.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ public static void WriteRootObject(TextWriter writer, object value)
162162
if (writer == null) return; //AOT
163163

164164
TypeConfig<T>.Init();
165+
TypeSerializer.OnSerialize?.Invoke(value);
165166

166167
JsState.Depth = 0;
167168
CacheFn(writer, value);

src/ServiceStack.Text/TypeSerializer.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public static UTF8Encoding UTF8Encoding
4242
set => JsConfig.UTF8Encoding = value;
4343
}
4444

45+
public static Action<object> OnSerialize { get; set; }
46+
4547
public const string DoubleQuoteString = "\"\"";
4648

4749
/// <summary>
@@ -129,6 +131,7 @@ public static string SerializeToString(object value, Type type)
129131
if (value is string str)
130132
return str.EncodeJsv();
131133

134+
OnSerialize?.Invoke(value);
132135
var writer = StringWriterThreadStatic.Allocate();
133136
JsvWriter.GetWriteFn(type)(writer, value);
134137
return StringWriterThreadStatic.ReturnAndFree(writer);
@@ -166,6 +169,7 @@ public static void SerializeToWriter(object value, Type type, TextWriter writer)
166169
return;
167170
}
168171

172+
OnSerialize?.Invoke(value);
169173
JsvWriter.GetWriteFn(type)(writer, value);
170174
}
171175

@@ -192,6 +196,7 @@ public static void SerializeToStream<T>(T value, Stream stream)
192196

193197
public static void SerializeToStream(object value, Type type, Stream stream)
194198
{
199+
OnSerialize?.Invoke(value);
195200
var writer = new StreamWriter(stream, JsConfig.UTF8Encoding);
196201
JsvWriter.GetWriteFn(type)(writer, value);
197202
writer.Flush();

0 commit comments

Comments
 (0)