C# 使用c反序列化具有一个空键的深度嵌套Json#
我正在尝试将下面嵌套的Json反序列化为自定义c#类型,下面也将对其进行描述,但我一直在反序列化对象中将paths键设置为null。下面是代码,任何关于如何正确反序列化的建议都非常感谢 Json: 我的C#ObjectC# 使用c反序列化具有一个空键的深度嵌套Json#,c#,json,json.net,json-deserialization,C#,Json,Json.net,Json Deserialization,我正在尝试将下面嵌套的Json反序列化为自定义c#类型,下面也将对其进行描述,但我一直在反序列化对象中将paths键设置为null。下面是代码,任何关于如何正确反序列化的建议都非常感谢 Json: 我的C#Object 您可以将路径反序列化为字典: public类SwaggerJsonObject { 公共字符串招摇过市{get;set;} 公共信息{get;set;} 公共字符串主机{get;set;} 公共字符串基路径{get;set;} 公共字符串[]方案{get;set;} 公共字典路径
您可以将路径反序列化为字典:
public类SwaggerJsonObject
{
公共字符串招摇过市{get;set;}
公共信息{get;set;}
公共字符串主机{get;set;}
公共字符串基路径{get;set;}
公共字符串[]方案{get;set;}
公共字典路径{get;set;}
}
或者创建自定义来处理您的类结构。您的c#类变量必须匹配json的大小写。或者,您可以使用jsonProperty。不确定控制器将如何工作。您可能需要使用JObject.Parse方法并迭代属性目前我看到的另一个问题是您的C#property
路径与JSON不匹配。我希望JSON看起来像“path”:{“controllers”:[{“restVerbs”:[“description”:“abc”]}}
基于您的C#类。请注意,我们在您的问题中的JSON中没有看到控制器
或restVerbs
。/activity/actions&/Test2Controller/DoAction是动态生成的键,因此,我无法硬编码它们的键名,这就是我创建控制器类型的原因。我希望有一种方法可以在Json中处理这些动态键。您的Json也不会显示路径列表。
{
"swagger": "2.0",
"info": {
"version": "v1",
"title": "API Service"
},
"host": "test@test.com",
"basePath": "/test",
"schemes": ["https"],
"paths": {
"/activity/actions": {
"get": {
"Tags": "activity",
"Description": "Test",
" ": "GET/activity/actions" //Empty Key
},
"put": {
"Tags": "activity",
"Description": "Test",
" ": "PUT/activity/actions"
}
},
"/Test2Controller/DoAction": {
"get": {
"Tags": "Test2Controlle",
"Description": "Test",
" ": "GET/activity/actions"
},
"put": {
"Tags": "Test2Controlle",
"Description": "Test",
" ": "PUT/activity/actions"
},
"POST": {
"Tags": "Test2Controlle",
"Description": "Test",
" ": "POST/activity/actions"
}
}
}
}
public class SwaggerJsonObject
{
public string Swagger { get; set; }
public Info Info { get; set; }
public string Host { get; set; }
public string BasePath { get; set; }
public string[] Schemes { get; set; }
public Path Paths { get; set; }
}
public class Info
{
public string Version { get; set; }
public string Title { get; set; }
}
public class Path
{
public List<Controllers> Controllers { get; set; }
}
public class Controllers
{
public List<RestVerbs> RestVerbs { get; set; }
}
public class RestVerbs
{
public string[] tags { get; set; }
public string description { get; set; }
public string EmptyKey { get; set; }
}
}
var deserializedObjedt = JsonConvert.DeserializeObject<SwaggerJsonObject>(json);
Values in Paths key are null.
public class SwaggerJsonObject
{
public string Swagger { get; set; }
public Info Info { get; set; }
public string Host { get; set; }
public string BasePath { get; set; }
public string[] Schemes { get; set; }
public Dictionary<string, Dictionary<string, Dictionary<string,string>>> Paths { get; set; }
}