using System; using System.Data; using DPumpHydr.WinFrmUI.WenSkin.Json.Serialization; namespace DPumpHydr.WinFrmUI.WenSkin.Json.Converters { /// /// Converts a to and from JSON. /// public class DataSetConverter : JsonConverter { /// /// Writes the JSON representation of the object. /// /// The to write to. /// The value. /// The calling serializer. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { DataSet obj = (DataSet)value; DefaultContractResolver defaultContractResolver = serializer.ContractResolver as DefaultContractResolver; DataTableConverter dataTableConverter = new DataTableConverter(); writer.WriteStartObject(); foreach (DataTable table in obj.Tables) { writer.WritePropertyName((defaultContractResolver != null) ? defaultContractResolver.GetResolvedPropertyName(table.TableName) : table.TableName); dataTableConverter.WriteJson(writer, table, serializer); } writer.WriteEndObject(); } /// /// Reads the JSON representation of the object. /// /// The to read from. /// Type of the object. /// The existing value of object being read. /// The calling serializer. /// The object value. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) { return null; } DataSet dataSet = ((objectType == typeof(DataSet)) ? new DataSet() : ((DataSet)Activator.CreateInstance(objectType))); DataTableConverter dataTableConverter = new DataTableConverter(); reader.ReadAndAssert(); while (reader.TokenType == JsonToken.PropertyName) { DataTable dataTable = dataSet.Tables[(string)reader.Value]; bool num = dataTable != null; dataTable = (DataTable)dataTableConverter.ReadJson(reader, typeof(DataTable), dataTable, serializer); if (!num) { dataSet.Tables.Add(dataTable); } reader.ReadAndAssert(); } return dataSet; } /// /// Determines whether this instance can convert the specified value type. /// /// Type of the value. /// /// true if this instance can convert the specified value type; otherwise, false. /// public override bool CanConvert(Type valueType) { return typeof(DataSet).IsAssignableFrom(valueType); } } }