Кажется, что свойство DataSetName System.Data.DataSet отсутствует при сериализации.Другие вещи, такие как встроенные таблицы и строки, выглядят хорошо.
Ниже приведен модульный тест VB.Net для демонстрации несериализованного свойства и ассортимент правильно сериализованного материала.
Dim ds = New DataSet, str as String
Assert.AreEqual("NewDataSet", ds.DataSetName)
ds.DataSetName = "MyDS"
Dim dt = New DataTable
dt.TableName = "MyDT"
Dim dc = New DataColumn
dc.ColumnName = "MyDC"
dc.DataType = GetType(String)
dt.Columns.Add(dc)
ds.Tables.Add(dt)
Dim dr = dt.NewRow
dr.ItemArray = New Object() {"MyValue"}
dt.Rows.Add(dr)
Assert.AreEqual(1, ds.Tables.Count)
Assert.AreEqual("MyDT", ds.Tables(0).TableName)
Assert.AreEqual(1, ds.Tables(0).Columns.Count)
Assert.AreEqual("MyDC", ds.Tables(0).Columns(0).ColumnName)
Assert.AreEqual(1, ds.Tables(0).Rows.Count)
Assert.AreEqual("MyValue", ds.Tables(0).Rows(0)(ds.Tables(0).Columns(0)))
Assert.AreEqual("MyDS", ds.DataSetName)
str = Newtonsoft.Json.JsonConvert.SerializeObject(ds)
ds = Newtonsoft.Json.JsonConvert.DeserializeObject(Of DataSet)(str)
Assert.AreEqual(1, ds.Tables.Count)
Assert.AreEqual("MyDT", ds.Tables(0).TableName)
Assert.AreEqual(1, ds.Tables(0).Columns.Count)
Assert.AreEqual("MyDC", ds.Tables(0).Columns(0).ColumnName)
Assert.AreEqual(1, ds.Tables(0).Rows.Count)
Assert.AreEqual("MyValue", ds.Tables(0).Rows(0)(ds.Tables(0).Columns(0)))
Assert.AreEqual("MyDS", ds.DataSetName, "FAILS - still 'NewDataSet'")
КСТАТИ произведенная сериализованная строка:
{"MyDT": [{"MyDC": "MyValue"}]}
BTW2 версия:
Сборка Newtonsoft.Json, версия = 12.0.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed