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
\r
//TODO check if I can get away with write element string\r
WriteStartElement (writer, mode, colnspc, col.Prefix, XmlHelper.Encode (col.ColumnName)); \r
- if (typeof (IXmlSerializable).IsAssignableFrom (col.DataType)) {\r
- ((IXmlSerializable)rowObject).WriteXml (writer);\r
+ if (typeof (IXmlSerializable).IsAssignableFrom (col.DataType) \r
+ || col.DataType == typeof (object)) {\r
+ IXmlSerializable serializableObj = rowObject as IXmlSerializable;\r
+ if (serializableObj == null)\r
+ throw new InvalidOperationException ();\r
+ ((IXmlSerializable)rowObject).WriteXml (writer); \r
} else {\r
writer.WriteString (WriteObjectXml (rowObject));\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