Вашият код - както е сега - ще прехвърли всяка стойност на ниво низ . Това е наистина лош подход . Неявните преобразувания, които се извършват, силно зависят от настройките на вашата система (език и култура). Най-лошата част е:това може да работи чудесно на вашата машина, докато я тествате, но в системата на клиента се поврежда със странни съобщения. Приятно отстраняване на грешки :-(
Променете кода си по този начин
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
dataTable.Columns.Add(prop.Name, prop.PropertyType.GetGenericArguments()[0]);
else
dataTable.Columns.Add(prop.Name, prop.PropertyType);
}
Това ще добави колоната - дори ако това е nullable тип - с правилния тип данни.
кредити: Този отговор ми помогна
АКТУАЛИЗИРАНЕ Още по-лесно
(Благодаря на Ив М. в коментар под свързания отговор)
foreach (PropertyInfo prop in props) {
// Setting column names as Property names.
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}