我正在使用返回JSON响应的API,如下所示;
JsonConvert.DeserializeObject<SAPISetPermitInfoResponse>(response);
我想创建一个可以与
一起使用的c#类定义IDictionary<string, JToken> foo = JObject.Parse(response);
string key = foo.Keys.FirstOrDefault(k => k.EndsWith("_response"));
response = JsonConvert.SerializeObject(foo[key]);
但是我不确定如何构造SAPISetPermitInfoResponse类,以便它可以与响应JSON字符串一起正常工作,因为嵌套元素。
目前,我们正在使用辅助方法基本上剥离&#34; SAPISetPermitInfo_response&#34; element形成JSON字符串,然后反序列化结果,如...
Find
但是,似乎应该有一种方法来创建SAPISetPermitInfoResponse类,以便它允许嵌套元素,而不需要帮助方法来解析JSON字符串。但是,到目前为止,我找不到任何运气。
我看过一篇文章,他们建议创建两个类,一个只有类型的字典属性,其中对象是另一个具有RC和MessageText属性的类,但这看起来有点麻烦,应该需要两个类对于每种不同的API方法响应。 (此API有大约90种不同的方法,它们都返回一个JSON响应,该响应以方法名称开头,后跟&#34; _response&#34;以类似的嵌套方式)。
我无法控制API的响应字符串,因此我必须处理我所获得的内容。我只是想确保我以正确和最有效的方式做到这一点。
提前感谢您的帮助。
答案 0 :(得分:0)
试试这个:
public class Result
{
public SAPISetPermitInfo SAPISetPermitInfo_response { get; set; }
}
public class SAPISetPermitInfo
{
public string RC { get; set; }
public string MessageText { get; set; }
}
然后:
string json = ... the JSON shown in your question
var response = JsonConvert.DeserializeObject<Result>(json);
Console.WriteLine(response.SAPISetPermitInfo_response.RC);
Console.WriteLine(response.SAPISetPermitInfo_response.MessageText);
答案 1 :(得分:0)
您需要做的是创建以下类:
public class SAPISetPermitInfoResponse
{
public string RC { get; set; }
public string MessageText { get; set; }
}
public class RootObject
{
public SAPISetPermitInfoResponse SAPISetPermitInfo_response { get; set; }
}
当你想要解析所需的Json时,你需要能够在没有Headers的情况下从API响应中获得Json,我们已经说过了
string responseJson = "{ \"SAPISetPermitInfo_response\" : {\"RC\" : \"value\",\"MessageText\" : \"value\"}}";
我们可以将它发送到以下函数以从Json字符串中获取对象:
public RootObject GetObjectFromResponse(string responseJson)
{
return JsonConvert.DeserializeObject<RootObject>(responseJson);
}
同样只是为了知识,您可以使用以下站点创建任何给定的Json到类对象: