C# 使用c反序列化具有一个空键的深度嵌套Json#

C# 使用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;} 公共字典路径

我正在尝试将下面嵌套的Json反序列化为自定义c#类型,下面也将对其进行描述,但我一直在反序列化对象中将paths键设置为null。下面是代码,任何关于如何正确反序列化的建议都非常感谢

Json:

我的C#Object


您可以将路径反序列化为字典:

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; }
}