c# - 在不知道结构的情况下使用 Newtonsoft.Json 解析 JSON
问题描述
我正在从事一个涉及使用 Swagger 定义自动化 API 调用的项目。我下载了 swagger.json 文件。我需要解析的 JSON Object 的结构并不一致。解析路径时,有一个对象列表,然后在其中它们具有可用于该特定路径的方法。我可以使用各种字符串方法仅检索路径,但我的问题是,如果 JSON 的结构没有确定的密钥,是否有解析 json 的好方法?这是我的意思的一个例子:
{"/user": {
"post": {
"tags": [
"user"
],
"summary": "Create user",
"description": "This can only be done by the logged in user.",
"operationId": "createUser",
"consumes": [
"application/json"
],
"produces": [
"application/json",
"application/xml"
],
"parameters": [
{
"in": "body",
"name": "body",
"description": "Created user object",
"required": true,
"schema": {
"$ref": "#/definitions/User"
}
}
],
"responses": {
"default": {
"description": "successful operation"
}
}
}
}
如果我只想解析该路径并检索方法对象,我该如何考虑有时对象将是“发布”或有时它将是“获取”、“放置”等,具体取决于路径允许的内容.
JObject jsonResp = swaggerDownload();
JObject paths = (JObject)jsonResp["paths"];
foreach (var i in paths)
{
string pathToString = i.ToString();
var shaveSomethings = pathToString.Substring(1, something.Length - 2);
var pathAndJson = shaveSomethings.Split(new[] { ',' }, 2);
string correctJsonStructure = "{\"" + pathAndJson[0] + "\":" + pathAndJson[1] + "}";
JObject bd = JObject.Parse(correctJsonStructure);
//dynamic pathsTest = JsonConvert.DeserializeObject<dynamic>(correctJsonStructure);
//JObject result = JsonConvert.DeserializeObject<JObject>(correctJsonStructure);
//Console.WriteLine(bd["/user"]);
}
解决方案
swagger.json 文件应该包含端点返回的每个实体的完整定义。您可以按照如何创建 Rest API 客户端来获取工作客户端。
我处理了一个 API,其中响应并不总是符合定义。我首先将所有响应保存到存储/日志,然后尝试反序列化 JSON。如果出现异常,我会返回存储/日志并查看有什么不同并更新我的代码以适应更改。几次迭代后,没有新的变化,磨难结束了。
希望有帮助。
推荐阅读
- javascript - 将 MUI Collapse 组件默认设置为“collapsed”
- python - 如何在不单击每个元素的情况下获取下拉选项(Selenium 和 Python)
- entity-framework - EF Core:无法对包含聚合或子查询的表达式执行聚合函数
- javascript - 我不断收到此 CORS 错误的原因可能是什么?
- angular - 如何跨 Angular 应用程序共享实例?
- css - CSS Grid(或)Flex 两行 4 列和 3 列
- laravel-backpack - 如何在 LdapRecord-Laravel 中使用背包换 Laravel?
- javascript - 修复这个手风琴元素
- r - 根据标识符输入缺失值
- javascript - 我如何在不发生这种情况的情况下接受输入?