一尘不染

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

json

如果我有一个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”参数。谢谢!


阅读 249

收藏
2020-07-27

共1个答案

一尘不染

@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());
2020-07-27