使用一种方法将多个JSON字符串转换为不同的对象

本文关键字:转换 字符串 JSON 对象 方法 一种 | 更新日期: 2023-09-27 18:26:20

我使用的是Json.Net框架,我试图只使用一种方法将多个Json字符串转换为不同的对象。

为了创建存储Json数据的对象,我正在使用这个网站。

到目前为止,我已经设法为一个对象(在本例中为RootObject)转换了一个方法,代码如下:

public class WebService
{
    protected string jsonstring;
    // Other code
    // Method
    public RootObject stringToObject(){
        return JsonConvert.DeserializeObject<RootObject>(this.jsonstring);
    }
}
// Object
public class RootObject
{
    public string id { get; set; }
    public string name { get; set; }
    public string title { get; set; }
}
// Usage
WebService ws = new WebService ("http://example.com/json_string.json");
RootObject data = ws.stringToObject ();

问题是,我还有两个对象需要将Json字符串转换为:

public class RootObject2
{
    public string id { get; set; }
    public string menu_id { get; set; }
    public string language { get; set; }
    public string title { get; set; }
}
public class RootObject3
{
    public string id { get; set; }
    public string menu_id { get; set; }
    public string position { get; set; }
    public string active { get; set; }
}

我试图将方法返回类型更改为泛型类型,但没有成功:

public object stringToObject(){
    return JsonConvert.DeserializeObject<object>(this.jsonstring);
}

我如何让方法返回类型为动态,这样我就可以做这样的事情:

WebService ws = new WebService ("http://example.com/json_string.json");
RootObject data = ws.stringToObject ();
WebService ws2 = new WebService ("http://example.com/json_string2.json");
RootObject2 data2 = ws2.stringToObject ();
WebService ws3 = new WebService ("http://example.com/json_string3.json");
RootObject3 data3 = ws3.stringToObject ();

使用一种方法将多个JSON字符串转换为不同的对象

为什么不将WebService设为泛型?

public class WebService<T>
{
    protected string jsonstring;
    // Other code
    // Method
    public T stringToObject(){
        return JsonConvert.DeserializeObject<T>(this.jsonstring);
    }
}

然后进行

var ws = new WebService<RootObject>("http://example.com/json_string.json");
var data = ws.stringToObject ();

或者,如果你愿意,你可以让stringToObject是通用的:

public class WebService
{
    protected string jsonstring;
    // Other code
    // Method
    public T stringToObject<T>(){
        return JsonConvert.DeserializeObject<T>(this.jsonstring);
    }
}

做:

var data = ws.stringToObject<RootObject>();