-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Make DBNull serializable #13845
Make DBNull serializable #13845
Changes from 1 commit
db966f6
f2706ae
29408dc
b142440
35f8867
423d10d
b9a716a
d19b3ac
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,7 +9,7 @@ namespace System | |
{ | ||
/// <summary> | ||
/// Holds Null class for which we guarantee that there is only ever one instance of. | ||
/// This only exists for backwarts compatibility with | ||
/// This only exists for compatibility with .NET Framework. | ||
/// </summary> | ||
#if CORECLR | ||
internal | ||
|
@@ -20,6 +20,7 @@ sealed class UnitySerializationHolder : ISerializable, IObjectReference | |
{ | ||
internal const int NullUnity = 0x0002; | ||
private readonly int _unityType; | ||
private readonly string _data; | ||
|
||
/// <summary> | ||
/// A helper method that returns the SerializationInfo that a class utilizing | ||
|
@@ -42,7 +43,9 @@ public UnitySerializationHolder(SerializationInfo info, StreamingContext context | |
} | ||
|
||
// We are ignoring any other serialization input as we are only concerned about DBNull. | ||
// We also store data and use it for erorr logging. | ||
_unityType = info.GetInt32("UnityType"); | ||
_data = info.GetString("Data"); | ||
} | ||
|
||
public void GetObjectData(SerializationInfo info, StreamingContext context) => | ||
|
@@ -53,7 +56,7 @@ public object GetRealObject(StreamingContext context) | |
// We are only support deserializing DBNull and throwing for everything else. | ||
if (_unityType != NullUnity) | ||
{ | ||
throw new ArgumentException(SR.Argument_InvalidUnity); | ||
throw new ArgumentException(SR.Format(SR.Argument_InvalidUnity, _data ?? "UnityType")); | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If we're still trying to be compatible with legacy blobs, should we at least throw if "UnityType" isn't There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We definitely should throw as otherwise users would just get a random object. But before I can do that I need to verify the weird behavior I posted above. Thanks! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The SerializationInfo isn't an ordered list - it's a dictionary of name-value pairs. So there's no problem. |
||
// We are always returning the same DBNull instance. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
throw new ArgumentException(SR.Format(SR.Argument_InvalidUnity, _data ?? _unityType ?? "UnityType"));