Skip to content

Commit 97fe732

Browse files
committed
Implement manual serialization for DynamicDictionaryWrapper
1 parent 70ce00b commit 97fe732

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

src/NHibernate/Util/DynamicDictionaryWrapper.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,28 @@
22
using System.Collections;
33
using System.Collections.Generic;
44
using System.Dynamic;
5+
using System.Runtime.Serialization;
56

67
namespace NHibernate.Util
78
{
89
[Serializable]
9-
public class DynamicDictionaryWrapper : DynamicObject, IDictionary, IDictionary<string, object>
10+
public sealed class DynamicDictionaryWrapper : DynamicObject,
11+
IDictionary,
12+
IDictionary<string, object>,
13+
ISerializable,
14+
IDeserializationCallback
1015
{
1116
private readonly Dictionary<string, object> _data = new Dictionary<string, object>();
1217

18+
public DynamicDictionaryWrapper()
19+
{
20+
}
21+
22+
private DynamicDictionaryWrapper(SerializationInfo info, StreamingContext context)
23+
{
24+
_data = info.GetValue<Dictionary<string, object>>("Data");
25+
}
26+
1327
public override bool TryGetMember(GetMemberBinder binder, out object result)
1428
{
1529
return _data.TryGetValue(binder.Name, out result);
@@ -187,5 +201,15 @@ object IDictionary<string, object>.this[string key]
187201
ICollection<object> IDictionary<string, object>.Values => ((IDictionary<string, object>) _data).Values;
188202

189203
ICollection<string> IDictionary<string, object>.Keys => ((IDictionary<string, object>) _data).Keys;
204+
205+
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
206+
{
207+
info.AddValue("Data", _data);
208+
}
209+
210+
void IDeserializationCallback.OnDeserialization(object sender)
211+
{
212+
_data.OnDeserialization(sender);
213+
}
190214
}
191215
}

0 commit comments

Comments
 (0)