Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SerializationEvents.cs
Go to the documentation of this file.
4
6
7internal sealed class SerializationEvents
8{
10
12
14
16
18 {
19 get
20 {
21 if (_onSerializingMethods == null)
22 {
23 return _onSerializedMethods != null;
24 }
25 return true;
26 }
27 }
28
36
38 {
40 Type type = t;
41 while (type != null && type != typeof(object))
42 {
43 MethodInfo[] methods = type.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
45 foreach (MethodInfo methodInfo in array)
46 {
47 if (methodInfo.IsDefined(attribute, inherit: false))
48 {
49 if (list == null)
50 {
51 list = new List<MethodInfo>();
52 }
53 list.Add(methodInfo);
54 }
55 }
56 type = type.BaseType;
57 }
58 list?.Reverse();
59 return list;
60 }
61
62 internal void InvokeOnSerializing(object obj, StreamingContext context)
63 {
65 }
66
67 internal void InvokeOnDeserializing(object obj, StreamingContext context)
68 {
70 }
71
72 internal void InvokeOnDeserialized(object obj, StreamingContext context)
73 {
75 }
76
77 internal SerializationEventHandler AddOnSerialized(object obj, SerializationEventHandler handler)
78 {
79 return AddOnDelegate(obj, handler, _onSerializedMethods);
80 }
81
82 internal SerializationEventHandler AddOnDeserialized(object obj, SerializationEventHandler handler)
83 {
85 }
86
87 private static void InvokeOnDelegate(object obj, StreamingContext context, List<MethodInfo> methods)
88 {
89 AddOnDelegate(obj, null, methods)?.Invoke(context);
90 }
91
92 private static SerializationEventHandler AddOnDelegate(object obj, SerializationEventHandler handler, List<MethodInfo> methods)
93 {
94 if (methods != null)
95 {
96 foreach (MethodInfo method in methods)
97 {
98 SerializationEventHandler b = method.CreateDelegate<SerializationEventHandler>(obj);
99 handler = (SerializationEventHandler)Delegate.Combine(handler, b);
100 }
101 }
102 return handler;
103 }
104}
static ? Delegate Combine(Delegate? a, Delegate? b)
Definition Delegate.cs:379
static void InvokeOnDelegate(object obj, StreamingContext context, List< MethodInfo > methods)
void InvokeOnDeserializing(object obj, StreamingContext context)
static SerializationEventHandler AddOnDelegate(object obj, SerializationEventHandler handler, List< MethodInfo > methods)
void InvokeOnDeserialized(object obj, StreamingContext context)
List< MethodInfo > GetMethodsWithAttribute(Type attribute, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type t)
void InvokeOnSerializing(object obj, StreamingContext context)
SerializationEventHandler AddOnDeserialized(object obj, SerializationEventHandler handler)
SerializationEvents([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type t)
SerializationEventHandler AddOnSerialized(object obj, SerializationEventHandler handler)
delegate void SerializationEventHandler(StreamingContext context)