protected DataSet (SerializationInfo info, StreamingContext context)\r
: this ()\r
{\r
+#if NET_2_0\r
+ if (IsBinarySerialized (info, context)) {\r
+ BinaryDeserialize (info);\r
+ return;\r
+ }\r
+#endif\r
+ string s = info.GetValue ("XmlSchema", typeof (String)) as String;\r
+ XmlTextReader reader = new XmlTextReader (new StringReader (s));\r
+ ReadXmlSchema (reader);\r
+ reader.Close ();\r
+\r
GetSerializationData (info, context);\r
}\r
\r
{\r
#if NET_2_0\r
if (RemotingFormat == SerializationFormat.Xml) {\r
+ info.AddValue ("SchemaSerializationMode.DataSet", this.SchemaSerializationMode);\r
#endif\r
StringWriter sw = new StringWriter ();\r
XmlTextWriter writer = new XmlTextWriter (sw);\r
#region Protected Methods\r
protected void GetSerializationData (SerializationInfo info, StreamingContext context)\r
{\r
-#if NET_2_0\r
- if (IsBinarySerialized (info, context)) {\r
- BinaryDeserialize (info);\r
- return;\r
- }\r
-#endif\r
- string s = info.GetValue ("XmlSchema", typeof (String)) as String;\r
+ string s = info.GetValue ("XmlDiffGram", typeof (String)) as String;\r
XmlTextReader reader = new XmlTextReader (new StringReader (s));\r
- ReadXmlSchema (reader);\r
- reader.Close ();\r
-\r
- s = info.GetValue ("XmlDiffGram", typeof (String)) as String;\r
- reader = new XmlTextReader (new StringReader (s));\r
ReadXml (reader, XmlReadMode.DiffGram);\r
reader.Close ();\r
}\r
private bool dataSetInitialized = true;\r
public event EventHandler Initialized;\r
\r
- [MonoTODO]\r
protected DataSet (SerializationInfo info, StreamingContext context, bool constructSchema)\r
- : this (info, context)\r
+ : this ()\r
{\r
+ if (DetermineSchemaSerializationMode (info, context) == SchemaSerializationMode.ExcludeSchema) {\r
+ InitializeDerivedDataSet ();\r
+ }\r
+ \r
+ if (IsBinarySerialized (info, context)) {\r
+ BinaryDeserialize (info);\r
+ return;\r
+ }\r
+ \r
+ if (constructSchema) {\r
+ string s = info.GetValue ("XmlSchema", typeof (String)) as String;\r
+ XmlTextReader reader = new XmlTextReader (new StringReader (s));\r
+ ReadXmlSchema (reader);\r
+ reader.Close ();\r
+ \r
+ GetSerializationData (info, context);\r
+ }\r
}\r
\r
SerializationFormat remotingFormat = SerializationFormat.Xml;\r
OnDataSetInitialized (e);\r
}\r
\r
- [MonoTODO]\r
protected virtual void InitializeDerivedDataSet ()\r
{\r
- throw new NotImplementedException ();\r
}\r
\r
protected SchemaSerializationMode DetermineSchemaSerializationMode (XmlReader reader)\r
\r
protected SchemaSerializationMode DetermineSchemaSerializationMode (SerializationInfo info, StreamingContext context)\r
{\r
+ SerializationInfoEnumerator e = info.GetEnumerator ();\r
+ while (e.MoveNext ()) {\r
+ if (e.Name == "SchemaSerializationMode.DataSet") {\r
+ return (SchemaSerializationMode) e.Value;\r
+ }\r
+ }\r
+ \r
return SchemaSerializationMode.IncludeSchema;\r
}\r
\r
myTypedDataSet.Order_DetailsRow[] drArr1 = ds.Orders[0].GetOrder_DetailsRows();
DataRow[] drArr2 = ds.Orders[0].GetChildRows(ds.Relations[0]);
Assert.AreEqual(drArr1 ,drArr2,"TDS25");
+
+#if NET_2_0
+ //now test serialization of a typed dataset generated by microsoft's xsd.exe
+ DataSet1 ds1 = new DataSet1();
+ ds1.DataTable1.AddDataTable1Row("test");
+ ds1.DataTable1.AddDataTable1Row("test2");
+
+ global::System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter =
+ new global::System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
+ MemoryStream stream = new MemoryStream();
+
+ formatter.Serialize(stream, ds1);
+
+ stream.Seek(0, SeekOrigin.Begin);
+
+ DataSet1 ds1load = (DataSet1) formatter.Deserialize(stream);
+
+ Assert.IsTrue(ds1load.Tables.Contains("DataTable1"));
+ Assert.AreEqual("DataTable1DataTable", ds1load.Tables["DataTable1"].GetType().Name);
+ Assert.AreEqual(2, ds1load.DataTable1.Rows.Count);
+ Assert.AreEqual("DataTable1Row", ds1load.DataTable1[0].GetType().Name);
+ if (ds1load.DataTable1[0].Column1 == "test") {
+ Assert.AreEqual("test2", ds1load.DataTable1[1].Column1);
+ } else if (ds1load.DataTable1[0].Column1 == "test2") {
+ Assert.AreEqual("test", ds1load.DataTable1[1].Column1);
+ } else {
+ Assert.Fail("Invalid entry for Column1");
+ }
+
+ //now test when the mode is exclude schema
+ ds1.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.ExcludeSchema;
+
+ stream = new MemoryStream();
+
+ formatter.Serialize(stream, ds1);
+
+ stream.Seek(0, SeekOrigin.Begin);
+
+ ds1load = (DataSet1) formatter.Deserialize(stream);
+
+ Assert.IsTrue(ds1load.Tables.Contains("DataTable1"));
+ Assert.AreEqual("DataTable1DataTable", ds1load.Tables["DataTable1"].GetType().Name);
+ Assert.AreEqual(2, ds1load.DataTable1.Rows.Count);
+ Assert.AreEqual("DataTable1Row", ds1load.DataTable1[0].GetType().Name);
+ if (ds1load.DataTable1[0].Column1 == "test") {
+ Assert.AreEqual("test2", ds1load.DataTable1[1].Column1);
+ } else if (ds1load.DataTable1[0].Column1 == "test2") {
+ Assert.AreEqual("test", ds1load.DataTable1[1].Column1);
+ } else {
+ Assert.Fail("Invalid entry for Column1");
+ }
+#endif
}
protected void T_Changing(object sender, myTypedDataSet.OrdersRowChangeEvent e)