将变量与C#中的类相关联(对于JSON)

时间:2010-07-29 08:18:11

标签: c# json generics datacontract

我必须为我的项目获取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));
    }

1 个答案:

答案 0 :(得分:1)

我看到您的方法存在一个问题:如果您有两个不同的网址,并返回ExampleDataContract怎么办?使用您的方法,您只能获取其中一个,因为该类型唯一地确定了URL。

无论如何,你是对的,摆脱神奇的字符串"Namespace.ExampleDataContract"是个好主意。使用if是一种选择,更多信息显示在SO 708911298976中。

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));
}