System.Data.DataSet.SerializeDataSet C# (CSharp) Method

SerializeDataSet() private method

private SerializeDataSet ( SerializationInfo info, StreamingContext context, SerializationFormat remotingFormat ) : void
info SerializationInfo
context System.Runtime.Serialization.StreamingContext
remotingFormat SerializationFormat
return void
        private void SerializeDataSet(SerializationInfo info, StreamingContext context, SerializationFormat remotingFormat)
        {
            Debug.Assert(info != null);
            info.AddValue("DataSet.RemotingVersion", new Version(2, 0));

            // SqlHotFix 299, SerializationFormat enumeration types don't exist in V1.1 SP1
            if (SerializationFormat.Xml != remotingFormat)
            {
                info.AddValue("DataSet.RemotingFormat", remotingFormat);
            }

            // SqlHotFix 299, SchemaSerializationMode enumeration types don't exist in V1.1 SP1
            if (SchemaSerializationMode.IncludeSchema != SchemaSerializationMode)
            {
                //SkipSchemaDuringSerialization
                info.AddValue("SchemaSerializationMode.DataSet", SchemaSerializationMode);
            }

            if (remotingFormat != SerializationFormat.Xml)
            {
                if (SchemaSerializationMode == SchemaSerializationMode.IncludeSchema)
                {
                    //DataSet public state properties
                    SerializeDataSetProperties(info, context);

                    //Tables Count
                    info.AddValue("DataSet.Tables.Count", Tables.Count);

                    //Tables, Columns, Rows
                    for (int i = 0; i < Tables.Count; i++)
                    {
                        BinaryFormatter bf = new BinaryFormatter(null, new StreamingContext(context.State, false));
                        MemoryStream memStream = new MemoryStream();
                        bf.Serialize(memStream, Tables[i]);
                        memStream.Position = 0;
                        info.AddValue(string.Format(CultureInfo.InvariantCulture, "DataSet.Tables_{0}", i), memStream.GetBuffer());
                    }

                    //Constraints
                    for (int i = 0; i < Tables.Count; i++)
                    {
                        Tables[i].SerializeConstraints(info, context, i, true);
                    }

                    //Relations
                    SerializeRelations(info, context);

                    //Expression Columns
                    for (int i = 0; i < Tables.Count; i++)
                    {
                        Tables[i].SerializeExpressionColumns(info, context, i);
                    }
                }
                else
                {
                    //Serialize  DataSet public properties.
                    SerializeDataSetProperties(info, context);
                }

                //Rows
                for (int i = 0; i < Tables.Count; i++)
                {
                    Tables[i].SerializeTableData(info, context, i);
                }
            }
            else
            {
                // old behaviour
                string strSchema = GetXmlSchemaForRemoting(null);

                string strData = null;
                info.AddValue(KEY_XMLSCHEMA, strSchema);

                StringBuilder strBuilder = new StringBuilder(EstimatedXmlStringSize() * 2);
                StringWriter strWriter = new StringWriter(strBuilder, CultureInfo.InvariantCulture);
                XmlTextWriter w = new XmlTextWriter(strWriter);
                WriteXml(w, XmlWriteMode.DiffGram);
                strData = strWriter.ToString();
                info.AddValue(KEY_XMLDIFFGRAM, strData);
            }
        }