<PackageReference Include="Newtonsoft.Json" Version="6.0.6" />

DataSetConverter

Converts a DataSet to and from JSON.
using Newtonsoft.Json.Serialization; using System; using System.Data; namespace Newtonsoft.Json.Converters { public class DataSetConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { DataSet dataSet = (DataSet)value; DefaultContractResolver defaultContractResolver = serializer.ContractResolver as DefaultContractResolver; DataTableConverter dataTableConverter = new DataTableConverter(); writer.WriteStartObject(); foreach (DataTable table in dataSet.Tables) { writer.WritePropertyName((defaultContractResolver != null) ? defaultContractResolver.GetResolvedPropertyName(table.TableName) : table.TableName); dataTableConverter.WriteJson(writer, table, serializer); } writer.WriteEndObject(); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { DataSet dataSet = ((object)objectType == typeof(DataSet)) ? new DataSet() : ((DataSet)Activator.CreateInstance(objectType)); DataTableConverter dataTableConverter = new DataTableConverter(); CheckedRead(reader); while (reader.TokenType == JsonToken.PropertyName) { DataTable dataTable = dataSet.Tables[(string)reader.Value]; bool flag = dataTable != null; dataTable = (DataTable)dataTableConverter.ReadJson(reader, typeof(DataTable), dataTable, serializer); if (!flag) dataSet.Tables.Add(dataTable); CheckedRead(reader); } return dataSet; } public override bool CanConvert(Type valueType) { return typeof(DataSet).IsAssignableFrom(valueType); } private void CheckedRead(JsonReader reader) { if (!reader.Read()) throw JsonSerializationException.Create(reader, "Unexpected end when reading DataSet."); } } }