Я работаю над приложением веб-сервиса с несколькими (11) вызовами веб-сервиса.Обычно заполняют разные классы.
Для каждого веб-сервиса, мне нужно заполнить мыло Body из массива строк, как это:
if (aMessage[(int)DCSSCustomerUpdate_V3.Branch].ToString().Length != 0)
{
wsSoapBody.Branch = aMessage[(int)DCSSCustomerUpdate_V3.Branch].ToString();
}
aMessage[int]
является массив строк, и [INT] определяется перечисляемого константой - в этом случае она определяется следующим образом:
private enum DCSSCustomerUpdate_V3
{
MsgType = 0,
MsgVersion = 1,
WSName = 2,
ReplyTo = 3,
SourceSystem = 4,
...
}
названия свойств в частичном классе подбираются перечисленном постоянным, так что я думаю, я бы передать в перечисленном постоянной, а?
частичный класс определен в WSDL, как это:
public partial class DCSSCustomerUpdateType
{
private string instIdField;
private string branchField;
...
}
Вместо того, чтобы делать это для каждого из них в отдельности (в каждом из 11 пользовательских службы классов), интересно, есть ли способ передать в частичном классе wsSoapBody (вместе со строковым массивом) и пропустить все члены класса, назначая значения из массива строк?
EDIT:
Я искал и нашел SO: 531384/how-to-loop-through-all-the-properties-of-a-class?
Так что я попытался это:
public static void DisplayAll(Object obj, string[] aMessage)
{
Type type = obj.GetType();
PropertyInfo[] properties = type.GetProperties();
foreach (PropertyInfo property in properties)
{
string value = aMessage[property.Name].ToString();
System.Diagnostics.Debug.WriteLine("Name: " + property.Name + ", Value: " + property.GetValue(obj, null));
}
}
но string value = aMessage[property.Name].ToString();
не будет компилироваться - как он ищет ИНТ вернулся из перечислимая постоянная ...
так куда я могу перейти оттуда?
, но что, если ' DCSSCustomerUpdate_V3' является общим, переданным, как бы передать его? –
Я обновил сообщение – Fabio
, так как я могу установить значения моего класса - это 'property.SetValue', прежде чем я верну класс к моему методу вызова? –