如果我有一个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>:
GetCustomAttribute<T>
GetCustomAttributes()
SelectMany
Cast<T>
return string.Join(",", modelType.GetProperties() .SelectMany(p => p.GetCustomAttributes(typeof(JsonPropertyAttribute)) .Cast<JsonPropertyAttribute>()) .Select(jp => jp.PropertyName) .ToArray());