Первоначально я опубликовал ответ, используя XmlDocument
, но я упустил из виду некоторые элементы веб-метода и не понял, что вы действительно пытались отобразить DTO.
Отражение звучит сложно, но на самом деле это не так. Следующий фрагмент будет делать то, что вы хотите:
public static void Populate(object dest, IDictionary dictionary)
{
Type t = dest.GetType();
foreach (object key in dictionary)
{
PropertyInfo prop = t.GetProperty(key.ToString(),
BindingFlags.Instance | BindingFlags.Public);
if ((prop != null) && prop.CanWrite)
{
object value = dictionary[key];
prop.SetValue(dest, value, null);
}
}
}
Затем вызовите это как:
BrowserCapsDto dto = new BrowserCapsDto();
Populate(dto, Capabilities); // Capabilities is the real BrowserCaps
Это довольно просто, потому что у вас уже есть IDictionary
и, таким образом, вы уже знаете все возможные имена, которые вы можете отобразить; вам на самом деле не нужно использовать какое-либо отражение в источнике, просто в пункте назначения.