使用一种方法将多个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 ();
为什么不将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>();