如何使用www.example.com web api从数据库中获取嵌套的json数据?asp.net web api?

mf98qq94  于 2023-06-25  发布在  .NET
关注(0)|答案(1)|浏览(134)

我在SQL Server数据库中有这样的数据:

我使用asp.net web API在代码中以json的形式获取这些数据,如下所示:

[HttpGet]
        public IHttpActionResult GetUsers()
        { 
            SqlDataAdapter da = new SqlDataAdapter("select * from users", con); 
            DataTable dt = new DataTable();
            da.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                return Ok(dt);
            }
            else
            {
                return Ok("No Data Found ...");
            }
        }

我得到的数据是这样的:

[
  {
   "user_id": 5,
   "frist_name": "John",
   "last_name": "{\"middle_name\":\"Ray\",\"lst_name\":\"Smith\"}",
   "user_name": "john@gmail.com",
  }
]

但我想把数据last_name作为嵌套的json,如下所示:

[
  {
   "user_id": 5,
   "frist_name": "John",
   "last_name": {
                 "middle_name": "Ray",
                 "lst_name": "Smith"
                },
   "user_name": "john@gmail.com",
  }
]

我该怎么做?

ojsjcaue

ojsjcaue1#

DataTable不能有任何嵌套对象,因此相反,您必须展平

if (dt.Rows.Count == 0)  return Ok("No Data Found ...");
     
    var jArr = JArray.FromObject(dt);

    foreach (JObject jObj in jArr)
    {
        var lastName = JObject.Parse((string)jObj["last_name"]);
        jObj.Property("frist_name")
            .AddAfterSelf(new JProperty("middle_name", lastName["middle_name"]));
        jObj["last_name"] = lastName["lst_name"];
    }

     return Ok(jArr);

输出

[
  {
    "user_id": 5,
    "frist_name": "John",
    "middle_name": "Ray",
    "last_name": "Smith",
    "user_name": "john@gmail.com"
  }
]

或者,如果不需要数据表,则只需解析last_name

foreach (JObject jObj in jArr)
        jObj["last_name"] = JObject.Parse((string)jObj["last_name"]);

输出

[
  {
    "user_id": 5,
    "frist_name": "John",
    "last_name": {
      "middle_name": "Ray",
      "lst_name": "Smith"
    },
    "user_name": "john@gmail.com"
  }
]

相关问题