【发布时间】:2019-07-12 09:35:10
【问题描述】:
我想知道一种将json 转换为数组以在c# winform 中处理的方法。
这些是我的尝试,但已达到目标,此时我想获取数据,但我无法获取数据,因为我对 json 没有经验。
最后一个代码句子给我错误:
没有为“WindowsFormsApplication2.Person[]”类型定义无参数构造函数。
这是响应内容:
JSON
"{\"Results\":{\"output1\":[{\"Class\":\"10\",\"age\":\"9.06725552044283\",\"menopause\":\"18.5605772106407\",\"tumor-size\":\"5.62041822714077\",\"inv-nodes\":\"2.50477840015836\",\"node-caps\":\"5.29640554298695\",\"deg-malig\":\"1.77286724180295\",\"breast\":\"2.67776376618299\",\"breast-quad\":\"5.61570098311485\",\"irradiat\":\"4.84969010222608\",\"Scored Labels\":\"1\",\"Scored Probabilities\":\"0.999995118824755\"}]}}"
类
public class Person
{
public string Class { get; set; }
public string age { get; set; }
public string menopause { get; set; }
public string tumor_size { get; set; }
public string inv_nodes { get; set; }
public string node_caps { get; set; }
public string deg_malig { get; set; }
public string breast { get; set; }
public string breast_quad { get; set; }
public string irradiat { get; set; }
public string output { get; set; }
public string possiblity { get; set; }
}
客户
var client = new RestClient("https://ussouthcentral.services.azureml.net/workspaces/3d904b8d125f457fa269fc848989e8da/services/3873cde13fdf459c807a71f975dc4c3e/execute?api-version=2.0&format=swagger");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "1ffba0bb-194c-7aa4-0348-7a1a46855693");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "Bearer 312mkibrneyPAdV9SiWbCJTs09VwCE9v2JBXds8SYmSSPp6OdwtKTb78Bk9n6RPZ91r/SVRs1idJDkDBBawIoA==");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\r\n \"Inputs\": {\r\n \"input1\":\r\n [\r\n {\r\n 'Class': \"10\", \r\n 'age': \"30\", \r\n 'menopause': \"60\", \r\n 'tumor-size': \"20\", \r\n 'inv-nodes': \"10\", \r\n 'node-caps': \"15\", \r\n 'deg-malig': \"10\", \r\n 'breast': \"10\", \r\n 'breast-quad': \"20\", \r\n 'irradiat': \"10\", \r\n }\r\n ],\r\n },\r\n \"GlobalParameters\": {\r\n }\r\n}\r\n", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content.ToString());
JavaScriptSerializer js = new JavaScriptSerializer();
var yourOjbect = new JavaScriptSerializer().DeserializeObject(response.Content);
Person[] persons = js.Deserialize<Person[]>(response.Content);
【问题讨论】:
-
您是否尝试过使用 Newtonsoft.Json 库来反序列化您的响应?
-
你的json是一个带有
Results属性的对象,它返回一个带有output1属性的对象,然后包含数组。所以你的对象结构需要反映这一点 -
你可以试试这个:
var yourOjbect = js.DeserializeObject(response.Content);并为Person类定义一个空的构造函数。 -
@RahulSharma person 类已经有一个(隐式)空构造函数。明确表示无济于事。
-
使用
Newtonsoft库,一个使用dynamic属性的 JSON 字符串的示例工作小提琴:dotnetfiddle.net/3hOWWu