我有一个查询rest API的方法,我在其中执行从JSON到对象的映射.由于我传递给此方法的查询字符串和对象类型始终必须匹配,因此我希望将查询字符串包含为静态字符串.
public class Root
{
public static string Query;
}
public class RootObject : Root, IRootObject
{
public D d { get; set; }
public static new string Query = "AccountSet";
}
public interface IRootObject
{
D d { get; }
}
public class RestClass
{
public void Connect<T>() where T : Root, IRootObject
{
T.Query <-- fails (not actual code. Just to show my problem)
}
}
Run Code Online (Sandbox Code Playgroud)
您可以为此使用自定义属性:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public sealed class QueryAttribute : Attribute
{
public string QueryString { get; private set; }
public QueryAttribute(string queryString)
{
QueryString = queryString;
}
public static string GetQueryStringForType(Type type)
{
var queryAttr = type.GetCustomAttributes(typeof(QueryAttribute), false)
.FirstOrDefault() as QueryAttribute;
return queryAttr != null ? queryAttr.QueryString : null;
}
}
Run Code Online (Sandbox Code Playgroud)
在你的课程中使用它:
[Query("AccountSet")]
public class RootObject : Root, IRootObject
{
public D d { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并像这样检索值:
public void Connect<T>() where T : Root, IRootObject
{
var query = QueryAttribute.GetQueryStringForType(typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
469 次 |
最近记录: |