Я пишу код проверки. Код будет принимать данные, переданные в веб-службу, и решить, может ли он выполнить действие, или вернуть сообщение вызывающему, что они пропустили некоторые поля и т.д.
У меня это в основном работает, кроме массивов. Я отмечаю свойства с атрибутом [RequiredField], чтобы представлять поля, которые необходимы. Поэтому, если это некоторые из моих данных,
public enum EnumTest
{
Value1,
Value2
}
[DataContract]
public class DummyWebserviceData
{
[DataMember]
[RequiredField]
public EnumTest[] EnumTest{ get; set; }
[DataMember]
[RequiredField]
public DummyWebserviceData2[] ArrayOfData { get; set; }
}
[DataContract]
public class DummyWebserviceData2
{
[DataMember]
[RequiredField]
public string FirstName { get; set;}
[DataMember]
[RequiredField]
public string LastName { get; set;}
[DataMember]
public string Description { get; set;}
}
Итак, что я работаю? У меня есть валидация дат и строк. Он использует рекурсию для достижения любого уровня, необходимого для данных.
Но... так что о двух массивах. Первый - это массив перечислений. Я хочу проверить в этом случае, что массив не пуст.
Второй - это массив значений DummyWebserviceData2. Мне нужно вытащить каждое значение и посмотреть его индивидуально.
Чтобы упростить код, который я написал, он выглядит примерно так:
foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
{
if (propertyInfo.PropertyType.IsArray)
{
// this craps out
object[] array = (object[])propertyInfo.GetValue(data, new object[] { 0 });
}
}
Итак, мне кажется, что первое, что я могу сказать, это массив. Но как тогда я могу узнать, сколько элементов в массиве?