C# 使用LINQ和asp.net c将JSON嵌套到数据表#

C# 使用LINQ和asp.net c将JSON嵌套到数据表#,c#,json,linq,C#,Json,Linq,我正在尝试将下面嵌套的json获取到datatable。我可以反序列化它,但无法将其获取到datatable。我尝试过wit类,但没有解析。此外,我还查找了类似的帖子或json序列,但找不到修复程序 { "firstName": "JANICE", "middleName": "F", "lastName": "MORANZ", "npi": "1295821098", "nationalProviderIdentifierType": "1", "firstApprovedDate": "20

我正在尝试将下面嵌套的json获取到datatable。我可以反序列化它,但无法将其获取到datatable。我尝试过wit类,但没有解析。此外,我还查找了类似的帖子或json序列,但找不到修复程序

{
"firstName": "JANICE",
"middleName": "F",
"lastName": "MORANZ",
"npi": "1295821098",
"nationalProviderIdentifierType": "1",
"firstApprovedDate": "2012-03-19T04:00:00.000Z",
"yearsInMedicare": 5,
"pecosEnrollmentDate": 2012,
"newlyEnrolled": false,
"organizations": [
    {
        "prvdrOrgName": "SOUTHWEST INTEGRATIVE HEALTH CENTER, LLC",
        "addressLineOne": "SOUTHWEST INTEGRATIVE HEALTH CENTER LLC",
        "addressLineTwo": "5310 HOMESTEAD RD NE BLDG 400",
        "city": "ALBUQUERQUE",
        "zip": "87110",
        "state": "NM",
        "individualScenario": {
            "aggregationLevel": 2,
            "mipsEligibleSwitch": true,
            "lowVolumeSwitch": true,
            "lowVolumeStatusReasons": [
                {
                    "lowVolStusRsnCd": "CHRG",
                    "lowVolStusRsnDesc": "Clinician’s Part B expenditures"
                }
            ]
        },
        "groupScenario": {
            "aggregationLevel": 1,
            "lowVolumeSwitch": false,
            "lowVolumeStatusReasons": []
        }
    }
],
"specialty": {
    "specialtyDescription": "Dermatology",
    "categoryReference": "Physicians",
    "typeDescription": "Doctor of Medicine"
}
}
这是我的密码。我已经在这里发布了方法。请让我知道我卡在哪里。所有根对象都通过,但阵列组织不通过循环

public DataTable GetDataTableFromJsonString(string json)
    {


        DataTable dt = new DataTable();
        try
        {


            dt.Columns.AddRange(new DataColumn[] {
    new DataColumn("firstName")
    ,new DataColumn("middleName")
    ,new DataColumn("lastName")
    ,new DataColumn("npi")
    ,new DataColumn("nationalProviderIdentifierType")
    //,new DataColumn("state")
    ,new DataColumn("firstApprovedDate")
    ,new DataColumn("yearsInMedicare")
    ,new DataColumn("pecosEnrollmentDate")
    ,new DataColumn("newlyEnrolled") 
    ,new DataColumn("organizations")
    ,new DataColumn("specialty")
    ,new DataColumn("prvdrOrgName")
    ,new DataColumn("addressLineOne")
    ,new DataColumn("addressLineTwo")
    ,new DataColumn("zip")
    ,new DataColumn("state")
    ,new DataColumn("individualScenario")});
            var jsonLinq = JObject.Parse(json);
            JToken organizations;
            string firstName = string.Empty;
            string middleName = string.Empty;
            string lastName = string.Empty;
            string npi1 = string.Empty;
            string nationalProviderIdentifierType = string.Empty;
           // string state = string.Empty;
            string firstApprovedDate = string.Empty;
            string yearsInMedicare = string.Empty;
            string pecosEnrollmentDate = string.Empty;
            string newlyEnrolled = string.Empty;
            string organizations1 = string.Empty;
            string specialty = string.Empty;
            string prvdrOrgName = string.Empty;
            string addressLineOne = string.Empty;
            string addressLineTwo = string.Empty;
            string city = string.Empty;
            string zip = string.Empty;
            string state = string.Empty;
            string individualScenario = string.Empty;
            string lowVolumeStatusReasons = string.Empty;
            string lowVolumeStatusReasons1 = string.Empty;
            string npi = String.Empty;




            // string firstName = string.Empty;
            List<JToken> results = jsonLinq.Children().ToList();
            foreach (JProperty item in results)
            {
                item.CreateReader();
                //if (item.Name == "data")
                //{
                organizations = item.Value;
                foreach (JObject jProp in organizations.Children().ToList())
                    {
                        organizations = jProp["organizations"].ToString();
                        foreach (JProperty jitem in jProp["organizations"].Children().ToList())
                        {
                            if (jitem.Name == "firstName")
                            {
                                firstName = jitem.Value.ToString();
                            }

                            if (jitem.Name == "middleName")
                            {
                                middleName = jitem.Value.ToString();
                            }
                            if (jitem.Name == "lastName")
                            {
                                lastName = jitem.Value.ToString();
                            }
                            if (jitem.Name == "npi")
                            {
                                npi = jitem.Value.ToString();
                            }
                            if (jitem.Name == "nationalProviderIdentifierType")
                            {
                                nationalProviderIdentifierType = jitem.Value.ToString();
                            }
                            if (jitem.Name == "firstApprovedDate")
                            {
                                firstApprovedDate = jitem.Value.ToString();
                            }
                            if (jitem.Name == "yearsInMedicare")
                            {
                                yearsInMedicare = jitem.Value.ToString();
                            }
                            if (jitem.Name == "pecosEnrollmentDate")
                            {
                                pecosEnrollmentDate = jitem.Value.ToString();
                            }
                            if (jitem.Name == "newlyEnrolled")
                            {
                                newlyEnrolled = jitem.Value.ToString();
                            }
                            //if (jitem.Name == "organizations")
                            //{
                            //    organizations = jitem.Value.ToString();
                            //}

                            if (jitem.Name == "organizations")
                            {
                                if (jitem.Value.Type == JTokenType.Array)
                                {
                                    JArray items = (JArray)jitem.Value;
                                    prvdrOrgName = items[0].SelectToken("value").ToString();
                                }
                                if (jitem.Name == "specialty")
                                {
                                    specialty = jitem.Value.ToString();
                                }
                            }

                        }
                        foreach (JProperty jitem in jProp["organizations"].Children().ToList())
                        {
                            if (jitem.Name == "prvdrOrgName")
                            {
                                prvdrOrgName = jitem.Value.ToString();
                            }

                            if (jitem.Name == "addressLineOne")
                            {
                                addressLineOne = jitem.Value.ToString();
                            }

                            if (jitem.Name == "addressLineTwo")
                            {
                                addressLineTwo = jitem.Value.ToString();
                            }
                            if (jitem.Name == "city")
                            {
                                city = jitem.Value.ToString();
                            }
                            if (jitem.Name == "zip")
                            {
                                zip = jitem.Value.ToString();
                            }
                            if (jitem.Name == "state")
                            {
                                state = jitem.Value.ToString();
                            }
                            if (jitem.Name == "individualScenario")
                            {
                                individualScenario = jitem.Value.ToString();
                            }

                            if (jitem.Name == "lowVolumeStatusReasons")
                            {
                                if (jitem.Value.Type == JTokenType.Array)
                                {
                                    JArray items = (JArray)jitem.Value;
                                    lowVolumeStatusReasons = items[0].SelectToken("value").ToString();
                                }
                            }
                            if (jitem.Name == "lowVolumeStatusReasons")
                            {
                                if (jitem.Value.Type == JTokenType.Array)
                                {
                                    JArray items = (JArray)jitem.Value;
                                    lowVolumeStatusReasons1 = items[0].SelectToken("value").ToString();
                                }
                            }
                        }
                    }
                    dt.Rows.Add(firstName, middleName, lastName, npi1, nationalProviderIdentifierType, firstApprovedDate, yearsInMedicare, pecosEnrollmentDate, newlyEnrolled, organizations, prvdrOrgName, addressLineOne, addressLineTwo, city, zip, state, individualScenario);
                //}
            }
            return dt;
        }
        catch (Exception ex)
        {
            return dt;
        }
    }
公共数据表GetDataTableFromJsonString(字符串json) { DataTable dt=新的DataTable(); 尝试 { dt.Columns.AddRange(新数据列[]){ 新数据列(“名字”) ,新数据列(“中间名”) ,新数据列(“姓氏”) ,新数据列(“npi”) ,新数据列(“nationalProviderIdentifierType”) //,新数据列(“状态”) ,新数据列(“firstApprovedDate”) ,新数据列(“医疗保险年”) ,新数据列(“pecosEnrollmentDate”) ,新数据列(“新登记”) ,新数据列(“组织”) ,新数据列(“专业”) ,新数据列(“prvdrOrgName”) ,新数据列(“addressLineOne”) ,新数据列(“地址行二”) ,新数据列(“zip”) ,新数据列(“状态”) ,新数据列(“个人场景”)}; var jsonLinq=JObject.Parse(json); JToken组织; string firstName=string.Empty; string middleName=string.Empty; string lastName=string.Empty; 字符串npi1=string.Empty; string nationalProviderIdentifierType=string.Empty; //字符串状态=string.Empty; string firstApprovedDate=string.Empty; string yearsInMedicare=string.Empty; string pecosEnrollmentDate=string.Empty; string newlyRegistered=string.Empty; string organizations1=string.Empty; string speciality=string.Empty; string prvdrOrgName=string.Empty; string addressLineOne=string.Empty; string addressLineTwo=string.Empty; string city=string.Empty; string zip=string.Empty; 字符串状态=string.Empty; string individualScenario=string.Empty; string lowVolumeStatusReasons=string.Empty; string lowVolumeStatusReasons1=string.Empty; string npi=string.Empty; //string firstName=string.Empty; List results=jsonLinq.Children().ToList(); foreach(结果中的JProperty项) { item.CreateReader(); //如果(item.Name==“数据”) //{ 组织=项目价值; foreach(组织中的JObject jProp.Children().ToList()) { organizations=jProp[“organizations”].ToString(); foreach(jProp[“组织”].Children().ToList()中的JProperty jitem) { 如果(jitem.Name==“firstName”) { firstName=jitem.Value.ToString(); } 如果(jitem.Name==“middleName”) { middleName=jitem.Value.ToString(); } 如果(jitem.Name==“lastName”) { lastName=jitem.Value.ToString(); } 如果(jitem.Name==“npi”) { npi=jitem.Value.ToString(); } 如果(jitem.Name==“nationalProviderIdentifierType”) { nationalProviderIdentifierType=jitem.Value.ToString(); } 如果(jitem.Name==“firstApprovedDate”) { firstApprovedDate=jitem.Value.ToString(); } 如果(jitem.Name==“年医保”) { yearsInMedicare=jitem.Value.ToString(); } 如果(jitem.Name==“pecosEnrollmentDate”) { pecosEnrollmentDate=jitem.Value.ToString(); } if(jitem.Name==“newlyEnrolled”) { newlyEnrolled=jitem.Value.ToString(); } //如果(jitem.Name==“组织”) //{ //organizations=jitem.Value.ToString(); //} 如果(jitem.Name==“组织”) { if(jitem.Value.Type==JTokenType.Array) { JArray items=(JArray)jitem.Value; prvdorgname=items[0]。选择标记(“值”).ToString(); } 如果(jitem.Name==“专业”) { speciality=jitem.Value.ToString(); } } } foreach(jProp[“组织”].Children().ToList()中的JProperty jitem) { if(jitem.Name==“prvdrOrgName”) { prvdrOrgName=jitem.Value.ToString();
 public DataTable DerializeDataTable(String jsonString)
{

    var table = JsonConvert.DeserializeObject<DataTable>(jsonString);
    return table;
}