我必须为我的项目获取API提供的JSON,这意味着使用类反序列化JSON,并且我选择使用DataContract
类。在任何情况下,不同的URL对应于API的不同JSON输出。
那我在问什么?这是为了查看是否有更好的方法来获取与DataContract
类相对应的网址,而不是创建public T GetObject<T>(string uri)
并将其与GetObject<ExampleDataContract>("http://blah/")
一起使用。
下面的代码显示了我当前的尝试,我认为这根本不是一个好主意,更不用说如果我更改名称空间,我会有一些乐趣。
public T GetObject<T>()
{
string uri = "";
string type = typeof(T).ToString();
switch (type)
{
case "Namespace.ExampleDataContract":
uri = "http://www.example.com/blah.json";
break;
}
return JsonHelper.Deserialize<T>(this.GetJson(uri));
}
答案 0 :(得分:1)
我看到您的方法存在一个问题:如果您有两个不同的网址,并返回ExampleDataContract
怎么办?使用您的方法,您只能获取其中一个,因为该类型唯一地确定了URL。
无论如何,你是对的,摆脱神奇的字符串"Namespace.ExampleDataContract"
是个好主意。使用if
是一种选择,更多信息显示在SO 708911和298976中。
public T GetObject<T>()
{
string uri = "";
if (typeof(T) == typeof(Namespace.ExampleDataContract))
{
uri = "http://www.example.com/blah.json";
}
else if (typeof(T) == ...)
{
...
}
else
{
... // throw some exception
}
return JsonHelper.Deserialize<T>(this.GetJson(uri));
}