【发布时间】:2017-11-11 19:19:24
【问题描述】:
我正在尝试根据查询字符串返回对象。
例如,我希望 api/users/{id}?fields=username,email,reputation 返回一个 User 类型的对象,该对象仅包含三个包含的属性(用户名、电子邮件、信誉)。
附带说明,默认情况下,在 .NET Core 中无法使用逗号分隔的查询字符串。
Here's a tutorial on making that work。
按照上面的指南,我有一个字符串列表。如何创建仅包含与这些字符串名称匹配的属性的对象?
只需几个字符串,我就可以做到这一点(感谢 Ben Hall):
List<string> listOfStrings ...; // Strings from query
User user = GetUser(id); // User from db
User newUser = new User();
if (listOfStrings.Contains("username"))
newUser.username = user.username;
if (listOfStrings.Contains("email"))
newUser.email = user.email;
if (listOfStrings.Contains("reputation"))
newUser.reputation = user.reputation;
但是对于一长串字符串(我的用户类有 30 多个属性),我该怎么做呢?
供参考,Facebook Graph API 这样做。
【问题讨论】:
-
您可以对
typeof(user)的公共属性使用反射,并且仅将那些已命名的字段从user复制到newUser,但是...为什么?对于 asp.net,根本不显示不在查询字符串中的user中的任何内容... -
你可以只返回一个具有这些属性的匿名对象。
-
我在 if 语句放置 lol 上犯了一个错误
标签: c# asp.net reflection .net-core