Skip to content

Commit 3e9c9b6

Browse files
committed
Implement helpers to serialize system types in preparation for .NET Core. (fix)
1 parent ee88543 commit 3e9c9b6

7 files changed

+31
-69
lines changed

src/NHibernate/Util/AssemblyQualifiedTypeName.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ public class AssemblyQualifiedTypeName
1111

1212
public AssemblyQualifiedTypeName(string type, string assembly)
1313
{
14-
this._type = type ?? throw new ArgumentNullException(nameof(type));
15-
this._assembly = assembly;
14+
_type = type ?? throw new ArgumentNullException(nameof(type));
15+
_assembly = assembly;
1616
unchecked
1717
{
1818
_hashCode = (type.GetHashCode() * 397) ^ (assembly?.GetHashCode() ?? 0);

src/NHibernate/Util/SerializableConstructorInfo.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using System;
2-
using System.Globalization;
32
using System.Linq;
43
using System.Reflection;
54
using System.Runtime.Serialization;
5+
using System.Security;
66

77
namespace NHibernate.Util
88
{
@@ -27,7 +27,7 @@ public static SerializableConstructorInfo Wrap(ConstructorInfo constructorInfo)
2727
/// Creates a new <see cref="SerializableConstructorInfo"/>
2828
/// </summary>
2929
/// <param name="constructorInfo">The <see cref="ConstructorInfo"/> being wrapped for serialization.</param>
30-
public SerializableConstructorInfo(ConstructorInfo constructorInfo)
30+
private SerializableConstructorInfo(ConstructorInfo constructorInfo)
3131
{
3232
_constructorInfo = constructorInfo;
3333
if (constructorInfo != null && constructorInfo.DeclaringType == null)
@@ -42,18 +42,19 @@ private SerializableConstructorInfo(SerializationInfo info, StreamingContext con
4242
SerializableSystemType[] parameterSystemTypes = info.GetValue<SerializableSystemType[]>("parameterTypesHelper");
4343

4444
System.Type[] parameterTypes = parameterSystemTypes?.Select(x => x.GetType()).ToArray();
45-
this._constructorInfo = declaringType?.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, CallingConventions.Any, parameterTypes, null);
45+
_constructorInfo = declaringType?.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, CallingConventions.Any, parameterTypes, null);
4646
}
4747

48+
[SecurityCritical]
4849
public void GetObjectData(SerializationInfo info, StreamingContext context)
4950
{
5051
SerializableSystemType[] parameterSystemTypes =
5152
_constructorInfo?.GetParameters()
52-
.Select(x => new SerializableSystemType(x.ParameterType))
53+
.Select(x => SerializableSystemType.Wrap(x.ParameterType))
5354
.ToArray();
5455

55-
info.AddValueWithType("declaringType", SerializableSystemType.Wrap(_constructorInfo?.DeclaringType));
56-
info.AddValueWithType("parameterTypesHelper", parameterSystemTypes);
56+
info.AddValue("declaringType", SerializableSystemType.Wrap(_constructorInfo?.DeclaringType));
57+
info.AddValue("parameterTypesHelper", parameterSystemTypes);
5758
}
5859

5960
public ConstructorInfo Value => _constructorInfo;

src/NHibernate/Util/SerializableFieldInfo.cs

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
2-
using System.Globalization;
32
using System.Reflection;
43
using System.Runtime.Serialization;
4+
using System.Security;
55

66
namespace NHibernate.Util
77
{
@@ -26,7 +26,7 @@ public static SerializableFieldInfo Wrap(FieldInfo fieldInfo)
2626
/// Creates a new <see cref="SerializableFieldInfo"/>
2727
/// </summary>
2828
/// <param name="fieldInfo">The <see cref="FieldInfo"/> being wrapped for serialization.</param>
29-
public SerializableFieldInfo(FieldInfo fieldInfo)
29+
private SerializableFieldInfo(FieldInfo fieldInfo)
3030
{
3131
_fieldInfo = fieldInfo;
3232
if (fieldInfo != null)
@@ -42,36 +42,18 @@ private SerializableFieldInfo(SerializationInfo info, StreamingContext context)
4242
System.Type declaringType = info.GetValue<SerializableSystemType>("declaringType")?.GetType();
4343
string fieldName = info.GetString("fieldName");
4444

45-
this._fieldInfo = declaringType?.GetField(
45+
_fieldInfo = declaringType?.GetField(
4646
fieldName,
4747
BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
4848
}
4949

50+
[SecurityCritical]
5051
public void GetObjectData(SerializationInfo info, StreamingContext context)
5152
{
52-
info.AddValueWithType("declaringType", SerializableSystemType.Wrap(_fieldInfo?.DeclaringType));
53+
info.AddValue("declaringType", SerializableSystemType.Wrap(_fieldInfo?.DeclaringType));
5354
info.AddValue("fieldName", _fieldInfo?.Name);
5455
}
5556

5657
public FieldInfo Value => _fieldInfo;
57-
58-
private bool Equals(SerializableFieldInfo other)
59-
{
60-
return Equals(_fieldInfo, other._fieldInfo);
61-
}
62-
63-
public override bool Equals(object obj)
64-
{
65-
if (ReferenceEquals(null, obj)) return false;
66-
if (ReferenceEquals(this, obj)) return true;
67-
if (ReferenceEquals(this._fieldInfo, obj)) return true;
68-
if (obj is SerializableFieldInfo) return Equals((SerializableFieldInfo) obj);
69-
return (obj is FieldInfo) && this._fieldInfo.Equals(obj);
70-
}
71-
72-
public override int GetHashCode()
73-
{
74-
return _fieldInfo.GetHashCode();
75-
}
7658
}
7759
}

src/NHibernate/Util/SerializableMethodInfo.cs

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Globalization;
42
using System.Linq;
53
using System.Reflection;
64
using System.Runtime.Serialization;
5+
using System.Security;
76

87
namespace NHibernate.Util
98
{
@@ -28,7 +27,7 @@ public static SerializableMethodInfo Wrap(MethodInfo methodInfo)
2827
/// Creates a new <see cref="SerializableMethodInfo"/>
2928
/// </summary>
3029
/// <param name="methodInfo">The <see cref="MethodInfo"/> being wrapped for serialization.</param>
31-
public SerializableMethodInfo(MethodInfo methodInfo)
30+
private SerializableMethodInfo(MethodInfo methodInfo)
3231
{
3332
_methodInfo = methodInfo;
3433
if (methodInfo != null)
@@ -46,42 +45,24 @@ private SerializableMethodInfo(SerializationInfo info, StreamingContext context)
4645
SerializableSystemType[] parameterSystemTypes = info.GetValue<SerializableSystemType[]>("parameterTypesHelper");
4746

4847
System.Type[] parameterTypes = parameterSystemTypes?.Select(x => x.GetType()).ToArray() ?? new System.Type[0];
49-
this._methodInfo = declaringType?.GetMethod(
48+
_methodInfo = declaringType?.GetMethod(
5049
fieldName,
5150
BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, parameterTypes, null);
5251
}
5352

53+
[SecurityCritical]
5454
public void GetObjectData(SerializationInfo info, StreamingContext context)
5555
{
5656
SerializableSystemType[] parameterSystemTypes =
5757
_methodInfo?.GetParameters()
58-
.Select(x => new SerializableSystemType(x.ParameterType))
58+
.Select(x => SerializableSystemType.Wrap(x.ParameterType))
5959
.ToArray();
6060

61-
info.AddValueWithType("declaringType", SerializableSystemType.Wrap(_methodInfo?.DeclaringType));
61+
info.AddValue("declaringType", SerializableSystemType.Wrap(_methodInfo?.DeclaringType));
6262
info.AddValue("methodName", _methodInfo?.Name);
63-
info.AddValueWithType("parameterTypesHelper", parameterSystemTypes);
63+
info.AddValue("parameterTypesHelper", parameterSystemTypes);
6464
}
6565

6666
public MethodInfo Value => _methodInfo;
67-
68-
private bool Equals(SerializableMethodInfo other)
69-
{
70-
return Equals(_methodInfo, other._methodInfo);
71-
}
72-
73-
public override bool Equals(object obj)
74-
{
75-
if (ReferenceEquals(null, obj)) return false;
76-
if (ReferenceEquals(this, obj)) return true;
77-
if (ReferenceEquals(this._methodInfo, obj)) return true;
78-
if (obj is SerializableMethodInfo) return Equals((SerializableMethodInfo) obj);
79-
return (obj is MethodInfo) && this._methodInfo.Equals(obj);
80-
}
81-
82-
public override int GetHashCode()
83-
{
84-
return _methodInfo.GetHashCode();
85-
}
8667
}
8768
}

src/NHibernate/Util/SerializablePropertyInfo.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
2-
using System.Globalization;
32
using System.Reflection;
43
using System.Runtime.Serialization;
4+
using System.Security;
55

66
namespace NHibernate.Util
77
{
@@ -26,7 +26,7 @@ public static SerializablePropertyInfo Wrap(PropertyInfo propertyInfo)
2626
/// Creates a new <see cref="SerializablePropertyInfo"/>
2727
/// </summary>
2828
/// <param name="propertyInfo">The <see cref="PropertyInfo"/> being wrapped for serialization.</param>
29-
public SerializablePropertyInfo(PropertyInfo propertyInfo)
29+
private SerializablePropertyInfo(PropertyInfo propertyInfo)
3030
{
3131
_propertyInfo = propertyInfo;
3232
if (propertyInfo != null)
@@ -42,14 +42,15 @@ private SerializablePropertyInfo(SerializationInfo info, StreamingContext contex
4242
System.Type declaringType = info.GetValue<SerializableSystemType>("declaringType")?.GetType();
4343
string propertyName = info.GetString("propertyName");
4444

45-
this._propertyInfo = declaringType?.GetProperty(
45+
_propertyInfo = declaringType?.GetProperty(
4646
propertyName,
4747
BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
4848
}
4949

50+
[SecurityCritical]
5051
public void GetObjectData(SerializationInfo info, StreamingContext context)
5152
{
52-
info.AddValueWithType("declaringType", SerializableSystemType.Wrap(_propertyInfo?.DeclaringType));
53+
info.AddValue("declaringType", SerializableSystemType.Wrap(_propertyInfo?.DeclaringType));
5354
info.AddValue("propertyName", _propertyInfo?.Name);
5455
}
5556

src/NHibernate/Util/SerializableSystemType.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Runtime.Serialization;
3+
using System.Security;
34

45
namespace NHibernate.Util
56
{
@@ -26,7 +27,7 @@ public static SerializableSystemType Wrap(System.Type type)
2627
/// Creates a new <see cref="SerializableSystemType"/>
2728
/// </summary>
2829
/// <param name="type">The <see cref="System.Type"/> being wrapped for serialization.</param>
29-
public SerializableSystemType(System.Type type)
30+
private SerializableSystemType(System.Type type)
3031
{
3132
_type = type;
3233
}
@@ -52,10 +53,11 @@ private SerializableSystemType(SerializationInfo info, StreamingContext context)
5253

5354
public string AssemblyQualifiedName => _typeName?.ToString() ?? _type?.AssemblyQualifiedName;
5455

56+
[SecurityCritical]
5557
public void GetObjectData(SerializationInfo info, StreamingContext context)
5658
{
5759
AssemblyQualifiedTypeName typeName = _typeName ?? ((_type == null) ? null : TypeNameParser.Parse(_type.AssemblyQualifiedName));
58-
info.AddValueWithType("typeName", typeName);
60+
info.AddValue("typeName", typeName);
5961
}
6062
}
6163
}

src/NHibernate/Util/SerializationInfoExtensions.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,5 @@ public static T GetValue<T>(this SerializationInfo info, string name)
1010
if (info == null) throw new ArgumentNullException(nameof(info));
1111
return (T) info.GetValue(name, typeof(T));
1212
}
13-
14-
public static void AddValueWithType<T>(this SerializationInfo info, string name, T value)
15-
{
16-
info.AddValue(name, value, typeof(T));
17-
}
1813
}
19-
}
14+
}

0 commit comments

Comments
 (0)