Это в основном следующий предыдущий вопрос, который я опубликовал для десериализации JSON в DataTable. Ну этот процесс почти завершен, это код:Преобразование списка в DataTable
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd();
dynamic d = JObject.Parse(result);
}
var root = JsonConvert.DeserializeObject<RootObject>(result);
public static DataTable ToDataTable<T>(this IList<T> data)
{
PropertyDescriptorCollection props =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
for (int i = 0; i < props.Count; i++)
{
PropertyDescriptor prop = props[i];
table.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (T item in data)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
return table;
}
public class Record
{
public int StatusID { get; set; }
public string Identifier { get; set; }
public string Status { get; set; }
public string StatusDate { get; set; }
public string WorkedBy { get; set; }
public string ContactedOn { get; set; }
public string Email { get; set; }
}
public class RootObject
{
public List<Record> Record { get; set; }
}
Теперь десериализация работает отлично, но я не могу преобразовать в DataTable. Я использую ToDataTable расширение я нашел в SO, и этот фрагмент должен превратить свой список в DataTable:
RootObject.Record.ToDataTable<Record>();
Теперь, конечно, я не могу этого сделать, так как запись не является статическим членом, но если я сделать его статическим, например:
public static List<Record> record { get; set; }
и изменить ToDataTable вызов расширения для
RootObject.record.ToDataTable<Record>();
это нарушает преобразование из JSON в списке. Использование контрольных точек, если я проверяю «корень» var своим нулем и не имеет данных, поэтому, когда он пытается превратить его в DataTable, вся ситуация падает, поскольку она имеет только нулевые значения.
_ «Теперь, конечно, я не могу этого сделать» _ Кажется, это должно сработать. Вы получаете синтаксическую ошибку? –
Да, да. Если я называю это без статичного, я получаю следующее: «Ссылка на объект требуется для нестатического поля, метода или свойства» –
Похоже, вы хотите «root.Record.ToDataTable();', предполагая «root» является экземпляром 'RootObject'. –