-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Make DBNull serializable #13845
Make DBNull serializable #13845
Changes from 4 commits
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 |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
// See the LICENSE file in the project root for more information. | ||
|
||
using System.Runtime.Serialization; | ||
using System.Reflection; | ||
|
||
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 | ||
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. backwarts is a new word .. and the sentence isn't complete |
||
/// </summary> | ||
#if CORECLR | ||
internal | ||
#else | ||
public // On CoreRT this must be public. | ||
#endif | ||
sealed class UnitySerializationHolder : ISerializable, IObjectReference | ||
{ | ||
internal const int NullUnity = 0x0002; | ||
|
||
public static void GetUnitySerializationInfo(SerializationInfo info, int unityType, string data, Assembly assembly) | ||
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.
Aside from that, LGTM. 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. forget my comment. was wrong. 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. Why wouldn't |
||
{ | ||
// A helper method that returns the SerializationInfo that a class utilizing | ||
// UnitySerializationHelper should return from a call to GetObjectData. It contains | ||
// the unityType (defined above) and any optional data (used only for the reflection | ||
// types.) | ||
|
||
info.SetType(typeof(UnitySerializationHolder)); | ||
info.AddValue("Data", data, typeof(string)); | ||
info.AddValue("UnityType", unityType); | ||
info.AddValue("AssemblyName", assembly?.FullName ?? string.Empty); | ||
} | ||
|
||
public UnitySerializationHolder(SerializationInfo info, StreamingContext context) | ||
{ | ||
if (info == null) | ||
{ | ||
throw new ArgumentNullException(nameof(info)); | ||
} | ||
|
||
// We are ignoring any serialization input as we are only concerned about DBNull. | ||
} | ||
|
||
public void GetObjectData(SerializationInfo info, StreamingContext context) => | ||
throw new NotSupportedException(SR.NotSupported_UnitySerHolder); | ||
|
||
public object GetRealObject(StreamingContext context) | ||
{ | ||
// We are always returning the same DBNull instance and ignoring serialization input. | ||
|
||
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. |
||
return DBNull.Value; | ||
} | ||
} | ||
} |
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.
need to add the string
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.
oh, it's already there by mistake...