C# 如何将json文件递归转换为字典<;字符串,动态>;在dotnet核心中

C# 如何将json文件递归转换为字典<;字符串,动态>;在dotnet核心中,c#,json,swagger,openapi,C#,Json,Swagger,Openapi,我有一个swagger doc json文件,我想将其转换为 键为属性名和值的Dictionary可以是Dictionary类型的另一个Dictionary,直到值是基元而不是json对象 我从var dic=JSonObject.Parse(“file.json”).Properties().ToDictionary(p=>p.Name,p=>p.Value)开始 当p.Value不是基元类型时,如何递归地测试并将其转换为dictionnary?我刚刚找到了这个包,它已经包含了我想要解析的所有

我有一个swagger doc json文件,我想将其转换为 键为属性名和值的
Dictionary
可以是
Dictionary
类型的另一个Dictionary,直到值是基元而不是json对象

我从
var dic=JSonObject.Parse(“file.json”).Properties().ToDictionary(p=>p.Name,p=>p.Value)开始

当p.Value不是基元类型时,如何递归地测试并将其转换为dictionnary?

我刚刚找到了这个包,它已经包含了我想要解析的所有东西,并像这样使用它

       string url = "https://localhost:10155/swagger/v1/swagger.json";
        var httpClient = new HttpClient();
        var stream = await httpClient.GetStreamAsync(url);
        var openApiDocument = new OpenApiStreamReader().Read(stream, out var diagnostic);
        return View(openApiDocument);
然后我可以得到树中所有的
OpenApiDocument
对象

我刚刚找到了这个包,它已经包含了我想要解析的所有东西,并且像这样使用它

       string url = "https://localhost:10155/swagger/v1/swagger.json";
        var httpClient = new HttpClient();
        var stream = await httpClient.GetStreamAsync(url);
        var openApiDocument = new OpenApiStreamReader().Read(stream, out var diagnostic);
        return View(openApiDocument);

然后我可以得到树中所有的
OpenApiDocument
对象

试试这个,它比异步概念更健壮

private void GetServiceJSONDocument()
{
    Microsoft.OpenApi.Models.OpenApiDocument JsonDoc = new Microsoft.OpenApi.Models.OpenApiDocument();
    HttpWebResponse wresponse = GetServiceAPIRequest(false, SiteAPIURL).GetResponse() as HttpWebResponse;
    JsonDoc = new OpenApiStreamReader().Read(wresponse.GetResponseStream(), out var diagnostic); 
}

private static HttpWebRequest GetServiceAPIRequest(bool isPOST, string atvURL)
{
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(atvURL);
    webRequest.ServicePoint.Expect100Continue = false;
    webRequest.ContentType = atvURL.ToLower().IndexOf(".json") >= 0  ? "application/json;charset=\"utf-8\"" : "text/xml;charset=\"utf-8\"";
    webRequest.Accept = "text/xml";
    webRequest.Headers.Add("SOAPAction", ActiveWSDLRequest);
    webRequest.Method = !isPOST ? "GET" : "POST";
    return webRequest;
}

试试这个,它比异步概念更健壮

private void GetServiceJSONDocument()
{
    Microsoft.OpenApi.Models.OpenApiDocument JsonDoc = new Microsoft.OpenApi.Models.OpenApiDocument();
    HttpWebResponse wresponse = GetServiceAPIRequest(false, SiteAPIURL).GetResponse() as HttpWebResponse;
    JsonDoc = new OpenApiStreamReader().Read(wresponse.GetResponseStream(), out var diagnostic); 
}

private static HttpWebRequest GetServiceAPIRequest(bool isPOST, string atvURL)
{
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(atvURL);
    webRequest.ServicePoint.Expect100Continue = false;
    webRequest.ContentType = atvURL.ToLower().IndexOf(".json") >= 0  ? "application/json;charset=\"utf-8\"" : "text/xml;charset=\"utf-8\"";
    webRequest.Accept = "text/xml";
    webRequest.Headers.Add("SOAPAction", ActiveWSDLRequest);
    webRequest.Method = !isPOST ? "GET" : "POST";
    return webRequest;
}

您能否提供
文件.json
?json文件不是静态的。它取决于后端。以下是您可以提供的json文件的示例
file.json
?json文件不是静态的。它取决于后端。下面是一个json文件的示例