public void CanSerializeAndDeserializeWithEmptyFirstTableAndPopulatedSecondTable()
        {
            var converter = new CompactDataSetConverter();

            var initialSet = new DataSet();

            var emptyTable = new DataTable { TableName = "Table1" };

            emptyTable.Columns.Add("Int32 Data", typeof(int));
            emptyTable.Columns.Add("String Data", typeof(string));

            initialSet.Tables.Add(emptyTable);

            var populatedTable = new DataTable { TableName = "Table2" };

            populatedTable.Columns.Add("String Data 2", typeof(string));
            populatedTable.Columns.Add("String Data 3", typeof(string));

            populatedTable.Rows.Add("This is not a number", "This is a string");
            populatedTable.Rows.Add("This isn't a number either", "But this is still a string");

            initialSet.Tables.Add(populatedTable);

            string serializedTable = JsonConvert.SerializeObject(initialSet, converter);

            Trace.WriteLine(serializedTable);

            var deserializedSet = (DataSet)JsonConvert.DeserializeObject(serializedTable, typeof(DataSet), converter);

            AssertDataSetsAreTheSame(initialSet, deserializedSet);
        }
        public void CanSerializeAndDeserializeWithSingleTable()
        {
            var converter = new CompactDataSetConverter();

            var initialSet = new DataSet();

            var initialTable = new DataTable { TableName = "Table1" };

            initialTable.Columns.Add("Int64 Data", typeof(long));
            initialTable.Columns.Add("Int32 Data", typeof(int));
            initialTable.Columns.Add("String Data", typeof(string));
            initialTable.Columns.Add("Byte Array Data", typeof(byte[]));

            initialTable.Rows.Add(long.MaxValue, int.MaxValue, "This is a string", new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
            initialTable.Rows.Add(long.MinValue, int.MinValue, "This is another string", new byte[0]);
            initialTable.Rows.Add(DBNull.Value, DBNull.Value, DBNull.Value);

            initialSet.Tables.Add(initialTable);

            string serializedTable = JsonConvert.SerializeObject(initialSet, converter);

            Trace.WriteLine(serializedTable);

            var deserializedSet = (DataSet)JsonConvert.DeserializeObject(serializedTable, typeof(DataSet), converter);

            AssertDataSetsAreTheSame(initialSet, deserializedSet);
        }
        public void CanSerializeAndDeserializeWithTwoTables()
        {
            var converter = new CompactDataSetConverter();

            var initialSet = new DataSet();

            var table1 = new DataTable { TableName = "Table1" };

            table1.Columns.Add("Int64 Data", typeof(long));
            table1.Columns.Add("Int32 Data", typeof(int));
            table1.Columns.Add("String Data", typeof(string));
            table1.Columns.Add("Byte Array Data", typeof(byte[]));

            table1.Rows.Add(long.MaxValue, int.MaxValue, "This is a string", new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
            table1.Rows.Add(long.MinValue, int.MinValue, "This is another string", new byte[0]);
            table1.Rows.Add(DBNull.Value, DBNull.Value, DBNull.Value);

            initialSet.Tables.Add(table1);

            var table2 = new DataTable { TableName = "Table2" };

            table2.Columns.Add("DateTime Data", typeof(DateTime));
            table2.Columns.Add("Byte Data", typeof(byte));
            table2.Columns.Add("Boolean Data", typeof(bool));
            table2.Columns.Add("Float Data", typeof(float));
            table2.Columns.Add("Double Data", typeof(double));

            table2.Rows.Add(DateTime.MinValue, byte.MinValue, false, float.MinValue, double.MinValue);
            table2.Rows.Add(DateTime.MaxValue, byte.MaxValue, true, float.MaxValue, double.MaxValue);

            string serializedTable = JsonConvert.SerializeObject(initialSet, converter);

            Trace.WriteLine(serializedTable);

            var deserializedSet = (DataSet)JsonConvert.DeserializeObject(serializedTable, typeof(DataSet), converter);

            AssertDataSetsAreTheSame(initialSet, deserializedSet);
        }
        public void NullCanBeDeserialized()
        {
            var converter = new CompactDataSetConverter();

            var deserializedSet = (DataSet)JsonConvert.DeserializeObject("null", typeof(DataSet), converter);

            Assert.IsNull(deserializedSet);
        }