Я пишу код подтверждения. Код будет принимать данные, переданные в веб-службу, и решать, сможет ли он выполнить действие, или возвращать вызывающему абоненту сообщение о том, что они пропустили некоторые поля и т. Д.
У меня это в основном работает, за исключением массивов. Я размечаю свойства с помощью атрибута [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 });
}
}
Так что мне кажется, что первое, что я могу сказать, это массив. Но как тогда узнать, сколько элементов в массиве?