当前位置: 首页 > 面试题库 >

从类中获取JSON属性名称的列表以在查询字符串中使用

董光霁
2023-03-14
问题内容

如果我有一个JSON.net用于绑定序列化JSON字符串中的数据的C#模型类,是否可以通过该类创建查询字符串以发出初始请求?

模型类示例:

public class model
{
   [JsonProperty(PropertyName = "id")]
   public long ID { get; set; }
   [JsonProperty(PropertyName = "some_string")]
   public string SomeString {get; set;} 
}

Querystring示例:

baseUrl + uri + "&fields=id,some_string" + token

因此,我想做的本质是从模型对象中同时收集“ id”和“ some_string”,以便我可以动态创建“&fields”参数。谢谢!


问题答案:

@Leigh Shepperson有正确的主意;但是,您可以使用LINQ用更少的代码来实现。我将创建这样的辅助方法:

using System.Linq;
using System.Reflection;
using Newtonsoft.Json;
...

public static string GetFields(Type modelType)
{
    return string.Join(",",
        modelType.GetProperties()
                 .Select(p => p.GetCustomAttribute<JsonPropertyAttribute>())
                 .Select(jp => jp.PropertyName));
}

您可以像这样使用它:

var fields = "&fields=" + GetFields(typeof(model));

编辑

如果您在.Net
Framework的3.5版本下运行,而您没有GetCustomAttribute<T>可用的通用方法,则可以对非通用GetCustomAttributes()方法执行相同的操作,而将其与SelectMany和一起使用Cast<T>

    return string.Join(",",
        modelType.GetProperties()
                 .SelectMany(p => p.GetCustomAttributes(typeof(JsonPropertyAttribute))
                                   .Cast<JsonPropertyAttribute>())
                 .Select(jp => jp.PropertyName)
                 .ToArray());


 类似资料:
  • 问题内容: 我有一个项目,我需要一个查询以使用表名来获取所有列的所有属性(列名,位置,数据类型,非空值和注释)。 我实现了获取列名,位置数据类型和不为空?与此查询: 但是,我需要评论! 问题答案: 这是针对系统目录的查询,该系统目录应获取您需要的所有内容(免费提供额外的主键字段)。 这将返回如下结果: num:列号 name:列名 typ:数据类型 notnull:列是否定义为 注释:为该列定义的

  • 经过一些研究,我发现了这些关于变量的问题(1,2)。类似地,我想知道是否有可能在Python中以字符串的形式获取列表的名称,例如: 对于列表,可以使用这样的方法 应返回。

  • 问题内容: 我有这样的数据: 我期望的输出是 我想在SQL中实现它。 问题答案: 首先创建这个 现在使用 as SQL字段 我希望这可以解决您的问题。

  • 问题内容: 很抱歉提出这样的问题,但我确实无法在Google中找到答案。假设我有一个课程,并且有一个字符串“ myColor”。现在,我想操纵属性。我怎样才能做到这一点? 编辑: 对不起,一个不清楚的问题,我想最好的方法是解释我需要什么。我有一个Swing表单,想在加载gui时使用首选项api设置字段的值。因此,我可以读取所有字段,然后对每个字段进行处理,但这似乎是不需要的编码,因此我想使用带有字

  • 问题内容: 我在Python列表中有一堆列名。现在,我需要将该列表用作语句中的列名称。我怎样才能做到这一点? 到目前为止,我有: 问题答案: 您无法传递要选择作为参数的列列表。它应该是您的SQL表达式的一部分,例如: 要注意的一件事是,SQL中参数值的占位符取决于数据库。如果不起作用,请尝试使用或。有关更多详细信息,请参见https://www.python.org/dev/peps/pep-02

  • 问题内容: 我有一个类型T的泛型类,我想获得实例化时传递给该类的类型的名称。这是一个例子。 我已经逛了好几个小时,但似乎找不到任何方法。有人尝试过吗? 任何帮助是极大的赞赏。 谢谢 问题答案: 单纯的快速方法是不可能的。 可能的解决方法是: 这些限制取决于它仅适用于类的事实。 如果这是通用类型: 返回全名(包括名称空间): 这就是为什么func搜索字符的最后一次出现。 测试如下: 更新Swift