public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) { return(null); } DataTable dataTable = existingValue as DataTable; DataTable value = dataTable; if (dataTable == null) { value = (objectType == typeof(DataTable) ? new DataTable() : (DataTable)Activator.CreateInstance(objectType)); } if (reader.TokenType == JsonToken.PropertyName) { value.TableName = (string)reader.Value; reader.ReadAndAssert(); if (reader.TokenType == JsonToken.Null) { return(value); } } if (reader.TokenType != JsonToken.StartArray) { throw JsonSerializationException.Create(reader, "Unexpected JSON token when reading DataTable. Expected StartArray, got {0}.".FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); } reader.ReadAndAssert(); while (reader.TokenType != JsonToken.EndArray) { DataTableConverter.CreateRow(reader, value, serializer); reader.ReadAndAssert(); } return(value); }
// Token: 0x06001498 RID: 5272 RVA: 0x0006D2E0 File Offset: 0x0006B4E0 private static void CreateRow(JsonReader reader, DataTable dt, JsonSerializer serializer) { DataRow dataRow = dt.NewRow(); reader.ReadAndAssert(); while (reader.TokenType == JsonToken.PropertyName) { string text = (string)reader.Value; reader.ReadAndAssert(); DataColumn dataColumn = dt.Columns[text]; if (dataColumn == null) { Type columnDataType = DataTableConverter.GetColumnDataType(reader); dataColumn = new DataColumn(text, columnDataType); dt.Columns.Add(dataColumn); } if (dataColumn.DataType == typeof(DataTable)) { if (reader.TokenType == JsonToken.StartArray) { reader.ReadAndAssert(); } DataTable dataTable = new DataTable(); while (reader.TokenType != JsonToken.EndArray) { DataTableConverter.CreateRow(reader, dataTable, serializer); reader.ReadAndAssert(); } dataRow[text] = dataTable; } else if (dataColumn.DataType.IsArray && dataColumn.DataType != typeof(byte[])) { if (reader.TokenType == JsonToken.StartArray) { reader.ReadAndAssert(); } List <object> list = new List <object>(); while (reader.TokenType != JsonToken.EndArray) { list.Add(reader.Value); reader.ReadAndAssert(); } Array array = Array.CreateInstance(dataColumn.DataType.GetElementType(), list.Count); ((ICollection)list).CopyTo(array, 0); dataRow[text] = array; } else { object value = (reader.Value != null) ? (serializer.Deserialize(reader, dataColumn.DataType) ?? DBNull.Value) : DBNull.Value; dataRow[text] = value; } reader.ReadAndAssert(); } dataRow.EndEdit(); dt.Rows.Add(dataRow); }
private static void CreateRow(JsonReader reader, DataTable dt) { DataRow dataRow = dt.NewRow(); reader.Read(); while (reader.TokenType == JsonToken.PropertyName) { string text = (string)reader.Value; reader.Read(); DataColumn dataColumn = dt.Columns[text]; if (dataColumn == null) { Type columnDataType = DataTableConverter.GetColumnDataType(reader); dataColumn = new DataColumn(text, columnDataType); dt.Columns.Add(dataColumn); } if (dataColumn.DataType == typeof(DataTable)) { if (reader.TokenType == JsonToken.StartArray) { reader.Read(); } DataTable dataTable = new DataTable(); while (reader.TokenType != JsonToken.EndArray) { DataTableConverter.CreateRow(reader, dataTable); reader.Read(); } dataRow[text] = dataTable; } else if (dataColumn.DataType.IsArray) { if (reader.TokenType == JsonToken.StartArray) { reader.Read(); } List <object> list = new List <object>(); while (reader.TokenType != JsonToken.EndArray) { list.Add(reader.Value); reader.Read(); } Array array = Array.CreateInstance(dataColumn.DataType.GetElementType(), list.Count); Array.Copy(list.ToArray(), array, list.Count); dataRow[text] = array; } else { dataRow[text] = (reader.Value ?? DBNull.Value); } reader.Read(); } dataRow.EndEdit(); dt.Rows.Add(dataRow); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { DataTable dataTable = existingValue as DataTable; if (dataTable == null) { dataTable = ((objectType == typeof(DataTable)) ? new DataTable() : ((DataTable)Activator.CreateInstance(objectType))); } if (reader.TokenType == JsonToken.PropertyName) { dataTable.TableName = (string)reader.Value; reader.Read(); } if (reader.TokenType == JsonToken.StartArray) { reader.Read(); } while (reader.TokenType != JsonToken.EndArray) { DataTableConverter.CreateRow(reader, dataTable); reader.Read(); } return(dataTable); }
private static void CreateRow(JsonReader reader, DataTable dt, JsonSerializer serializer) { object value; DataRow dataRow = dt.NewRow(); reader.ReadAndAssert(); while (reader.TokenType == JsonToken.PropertyName) { string str = (string)reader.Value; reader.ReadAndAssert(); DataColumn item = dt.Columns[str]; if (item == null) { item = new DataColumn(str, DataTableConverter.GetColumnDataType(reader)); dt.Columns.Add(item); } if (item.DataType == typeof(DataTable)) { if (reader.TokenType == JsonToken.StartArray) { reader.ReadAndAssert(); } DataTable dataTable = new DataTable(); while (reader.TokenType != JsonToken.EndArray) { DataTableConverter.CreateRow(reader, dataTable, serializer); reader.ReadAndAssert(); } dataRow[str] = dataTable; } else if (!item.DataType.IsArray || !(item.DataType != typeof(byte[]))) { if (reader.Value != null) { value = serializer.Deserialize(reader, item.DataType); if (value == null) { value = DBNull.Value; } } else { value = DBNull.Value; } dataRow[str] = value; } else { if (reader.TokenType == JsonToken.StartArray) { reader.ReadAndAssert(); } List <object> objs = new List <object>(); while (reader.TokenType != JsonToken.EndArray) { objs.Add(reader.Value); reader.ReadAndAssert(); } Array arrays = Array.CreateInstance(item.DataType.GetElementType(), objs.Count); ((ICollection)objs).CopyTo(arrays, 0); dataRow[str] = arrays; } reader.ReadAndAssert(); } dataRow.EndEdit(); dt.Rows.Add(dataRow); }