@@ -1132,6 +1132,66 @@ import System
1132
1132
1133
1133
" ,
1134
1134
} ,
1135
+ new TestCase
1136
+ {
1137
+ Name = "test_serialize_unserializable_object" ,
1138
+ DotNetBefore = @"
1139
+ namespace TestNamespace
1140
+ {
1141
+ public class NotSerializableTextWriter : System.IO.TextWriter
1142
+ {
1143
+ override public System.Text.Encoding Encoding { get { return System.Text.Encoding.ASCII;} }
1144
+ }
1145
+ [System.Serializable]
1146
+ public static class SerializableWriter
1147
+ {
1148
+ private static System.IO.TextWriter _writer = null;
1149
+ public static System.IO.TextWriter Writer {get { return _writer; }}
1150
+ public static void CreateInternalWriter()
1151
+ {
1152
+ _writer = System.IO.TextWriter.Synchronized(new NotSerializableTextWriter());
1153
+ }
1154
+ }
1155
+ }
1156
+ " ,
1157
+ DotNetAfter = @"
1158
+ namespace TestNamespace
1159
+ {
1160
+ public class NotSerializableTextWriter : System.IO.TextWriter
1161
+ {
1162
+ override public System.Text.Encoding Encoding { get { return System.Text.Encoding.ASCII;} }
1163
+ }
1164
+ [System.Serializable]
1165
+ public static class SerializableWriter
1166
+ {
1167
+ private static System.IO.TextWriter _writer = null;
1168
+ public static System.IO.TextWriter Writer {get { return _writer; }}
1169
+ public static void CreateInternalWriter()
1170
+ {
1171
+ _writer = System.IO.TextWriter.Synchronized(new NotSerializableTextWriter());
1172
+ }
1173
+ }
1174
+ }
1175
+ " ,
1176
+ PythonCode = @"
1177
+ import sys
1178
+
1179
+ def before_reload():
1180
+ import clr
1181
+ import System
1182
+ clr.AddReference('DomainTests')
1183
+ import TestNamespace
1184
+ TestNamespace.SerializableWriter.CreateInternalWriter();
1185
+ sys.__obj = TestNamespace.SerializableWriter.Writer
1186
+ sys.__obj.WriteLine('test')
1187
+
1188
+ def after_reload():
1189
+ import clr
1190
+ import System
1191
+ sys.__obj.WriteLine('test')
1192
+
1193
+ " ,
1194
+ }
1135
1195
} ;
1136
1196
1137
1197
/// <summary>
@@ -1142,7 +1202,59 @@ import System
1142
1202
const string CaseRunnerTemplate = @"
1143
1203
using System;
1144
1204
using System.IO;
1205
+ using System.Runtime.Serialization;
1206
+ using System.Runtime.Serialization.Formatters.Binary;
1145
1207
using Python.Runtime;
1208
+
1209
+ namespace Serialization
1210
+ {{
1211
+ // Classes in this namespace is mostly useful for test_serialize_unserializable_object
1212
+ class NotSerializableSerializer : ISerializationSurrogate
1213
+ {{
1214
+ public NotSerializableSerializer()
1215
+ {{
1216
+ }}
1217
+ public void GetObjectData(object obj, SerializationInfo info, StreamingContext context)
1218
+ {{
1219
+ info.AddValue(""notSerialized_tp"", obj.GetType());
1220
+ }}
1221
+ public object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
1222
+ {{
1223
+ if (info == null)
1224
+ {{
1225
+ return null;
1226
+ }}
1227
+ Type typeObj = info.GetValue(""notSerialized_tp"", typeof(Type)) as Type;
1228
+ if (typeObj == null)
1229
+ {{
1230
+ return null;
1231
+ }}
1232
+
1233
+ obj = Activator.CreateInstance(typeObj);
1234
+ return obj;
1235
+ }}
1236
+ }}
1237
+ class NonSerializableSelector : SurrogateSelector
1238
+ {{
1239
+ public override ISerializationSurrogate GetSurrogate(Type type, StreamingContext context, out ISurrogateSelector selector)
1240
+ {{
1241
+ if (type == null)
1242
+ {{
1243
+ throw new ArgumentNullException();
1244
+ }}
1245
+ selector = (ISurrogateSelector)this;
1246
+ if (type.IsSerializable)
1247
+ {{
1248
+ return null; // use whichever default
1249
+ }}
1250
+ else
1251
+ {{
1252
+ return (ISerializationSurrogate)(new NotSerializableSerializer());
1253
+ }}
1254
+ }}
1255
+ }}
1256
+ }}
1257
+
1146
1258
namespace CaseRunner
1147
1259
{{
1148
1260
class CaseRunner
@@ -1151,6 +1263,11 @@ public static int Main()
1151
1263
{{
1152
1264
try
1153
1265
{{
1266
+ RuntimeData.FormatterFactory = () =>
1267
+ {{
1268
+ return new BinaryFormatter(){{SurrogateSelector = new Serialization.NonSerializableSelector()}};
1269
+ }};
1270
+
1154
1271
PythonEngine.Initialize();
1155
1272
using (Py.GIL())
1156
1273
{{
0 commit comments