Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit a87573a

Browse files
authored
Serialization of DataColumn Type Corrected (#27286)
1 parent 01326e6 commit a87573a

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/System.Data.Common/src/System/Data/DataTable.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -372,8 +372,7 @@ internal void SerializeTableSchema(SerializationInfo info, StreamingContext cont
372372
info.AddValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.DefaultValue", i), Columns[i].DefaultValue);
373373
info.AddValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.ReadOnly", i), Columns[i].ReadOnly);
374374
info.AddValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.MaxLength", i), Columns[i].MaxLength);
375-
info.AddValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.DataType", i), Columns[i].DataType);
376-
375+
info.AddValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.DataType_AssemblyQualifiedName", i), Columns[i].DataType.AssemblyQualifiedName);
377376
info.AddValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.XmlDataType", i), Columns[i].XmlDataType);
378377
info.AddValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.SimpleType", i), Columns[i].SimpleType);
379378

@@ -442,7 +441,8 @@ internal void DeserializeTableSchema(SerializationInfo info, StreamingContext co
442441
dc._columnUri = info.GetString(string.Format(formatProvider, "DataTable.DataColumn_{0}.Namespace", i));
443442
dc.Prefix = info.GetString(string.Format(formatProvider, "DataTable.DataColumn_{0}.Prefix", i));
444443

445-
dc.DataType = (Type)info.GetValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.DataType", i), typeof(Type));
444+
string typeName = (string)info.GetValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.DataType_AssemblyQualifiedName", i), typeof(string));
445+
dc.DataType = Type.GetType(typeName, throwOnError: true);
446446
dc.XmlDataType = (string)info.GetValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.XmlDataType", i), typeof(string));
447447
dc.SimpleType = (SimpleType)info.GetValue(string.Format(formatProvider, "DataTable.DataColumn_{0}.SimpleType", i), typeof(SimpleType));
448448

src/System.Data.Common/tests/System/Data/DataTableTest.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
using System.Diagnostics;
3333
using System.Globalization;
3434
using System.IO;
35+
using System.Runtime.Serialization.Formatters.Binary;
3536
using System.Runtime.Serialization.Formatters.Tests;
3637
using System.Xml;
3738
using Xunit;
@@ -388,6 +389,25 @@ public void SelectOperators()
388389

389390
}
390391

392+
[Fact]
393+
public void DataColumnTypeSerialization()
394+
{
395+
DataTable dt = new DataTable("MyTable");
396+
DataColumn dc = new DataColumn("dc", typeof(int));
397+
dt.Columns.Add(dc);
398+
dt.RemotingFormat = SerializationFormat.Binary;
399+
400+
DataTable dtDeserialized;
401+
using (MemoryStream ms = new MemoryStream())
402+
{
403+
BinaryFormatter bf = new BinaryFormatter();
404+
bf.Serialize(ms, dt);
405+
ms.Seek(0, SeekOrigin.Begin);
406+
dtDeserialized = (DataTable)bf.Deserialize(ms);
407+
}
408+
Assert.Equal(dc.DataType, dtDeserialized.Columns[0].DataType);
409+
}
410+
391411
[Fact]
392412
public void SelectExceptions()
393413
{

0 commit comments

Comments
 (0)