A List<T>
не привязывается. Вместо этого используйте IList<T>
в качестве типа возвращаемого свойства.
public IList<DataTable> MeasurementErrors { get; set; }
Кроме того, лучше использовать внутренний список для членов списка и всегда делать его доступным только для чтения, в зависимости от ваших потребностей.
public class MyObject {
private IList<DataTable> _measurementErrors;
public MyObject() {
_measurementErrors = new List<DataTable>();
}
// This way you make sure to never have a null reference, and don't give
// out the control over your list to the user.
public IList<DataTable> MeasurementErrors {
get {
return _measurementErrors;
}
}
}
РЕДАКТИРОВАТЬ # 1
Похоже, что IList не поддерживает сериализацию, поэтому его просто исключают из получаемого XML-файла. Есть ли простой способ сделать этот IList сериализуемым?
Если ваш экземпляр IList<T>
находится под капотом List<T>
, то я предлагаю вам набрать IList<T>
на List<T>
ради сериализации. А если это не удается, создайте новый список из его содержимого.
var list = myObject1.MeasurementErrors as List<DataTable> ?? new List<DataTable>(myObject1.MeasurementErrors);
Подробнее о ?? Operator
см. В MSDN: ?? Operator (C# Reference)
Короче говоря, это эквивалентно написанию:
var list = (myObject1.MeasurementErrors as List<DataTable>) == null ?
new List<DataTable>(myObject1.MeasurementErrors) :
myObject1.MeasurementErrors as List<DataTable>;
Или, если вы предпочитаете:
var list = myObject1.MeasurementErrors as List<DataTable>;
if (list == null)
list = new List<DataTable>(myObject1.MeasurementErrors);
Надеюсь, эта информация не больше сбивает с толку, чем помогает.