我有一个WebAPI控制器,接受多部分表单数据格式的帖子.这样做是因为我在同一篇文章中获取了二进制文件和表单数据.
我尝试从这个问题中调整解决方案:如何将namevaluecollection自动化为强类型类?
这是改编的代码:
private Event nvcToCoreEvent(NameValueCollection nvc) {
Event e = new Event();
foreach (string kvp in nvc.AllKeys) {
PropertyInfo pi = e.GetType().GetProperty(kvp, BindingFlags.Public | BindingFlags.Instance);
if (pi != null) {
pi.SetValue(e, nvc[kvp], null);
}
}
return e;
}
Run Code Online (Sandbox Code Playgroud)
问题是来自nvc.AllKeys所有的密钥看起来像这样:"coreEvent[EventId]"或者:"coreEvent[AuthorUser][UserId]"
pi始终为null,并且没有任何内容被映射,因为GetProperty期望传递"EventId",而不是"coreEvent[EventId]".如果只有几个属性它就不会那么糟糕但是我的Event类非常大并且包含包含它们自己的子对象等的子对象.它还包含许多对象列表,它们也可以有自己的子对象对象.
除了编写关键字符串解析器和映射引擎以将值映射到正确的子对象或集合之外,还有其他选择吗?
编辑这是请求的类和示例数据:
活动类
public class Event {
public Event() {
Documents = new List<Document>();
SignOffs = new List<SignOff>();
CrossReferences = new List<CrossReference>();
Notes = …Run Code Online (Sandbox Code Playgroud)