我需要創建一個從常規列到帶有鍵的 json 的 json。只有我不明白如何在 c# 中做到這一點。我正在使用 Postgresql 資料庫,我需要在那里保存單獨的資料,我需要通過 api 傳遞給服務器,如下所示
我得到的是。
{
"id": '',
"title": "",
"description": "",
"image": "",
"question": ""
}
到
{
"id": {
"title": "",
"description": "",
"image": "",
"question": ""
}
}
這是我的代碼
[HttpGet]
public JsonResult Get(int id)
{
string query =
@"
select id as ""id"",
title as ""title"",
description as ""description"",
image as ""image"",
question as ""question""
from card";
DataTable dt = new DataTable();
string sqlDataSource =
_configuration.GetConnectionString("EmployeeAppCon");
NpgsqlDataReader myReader;
using (NpgsqlConnection myCon = new NpgsqlConnection(sqlDataSource))
{
myCon.Open();
using (NpgsqlCommand myCommand = new NpgsqlCommand(query, myCon)
)
{
myReader = myCommand.ExecuteReader();
dt.Load (myReader);
myReader.Close();
myCon.Close();
}
}
string temp = JsonConvert.SerializeObject(dt);
return new JsonResult(dt);
}
uj5u.com熱心網友回復:
添加以下類
public class MyCalss
{
public MyItem ID { get; set; }
}
public class MyItem
{
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string Question { get; set; }
}
然后然后將以下行添加到您的代碼中
List<MyCalss> items = new List<MyCalss>();
foreach (DataRow row in dt.Rows)
{
MyCalss item = new MyCalss();
item.ID = new MyItem();
item.ID.Title = row["title"].ToString();
item.ID.Description = row["description"].ToString();
item.ID.Image = row["image"].ToString();
item.ID.Question = row["question"].ToString();
items.Add(item);
}
string temp = JsonConvert.SerializeObject(items);
uj5u.com熱心網友回復:
根據您提供的資訊,我假設您的查詢回傳多個具有唯一 ID 的記錄。因此,您的最終 json 可能如下所示:
{
"id1": {
"title": "",
"description": "",
"image": "",
"question": ""
},
...
"idn": {
"title": "",
"description": "",
"image": "",
"question": ""
}
}
為了有一個這樣的結構,你需要改變你的DataTable進入Dictionary<string, Data>。的Data是自定義的結構來存盤title...question欄位:
struct Data
{
public string Title;
public string Description;
public string Image;
public string Question;
}
映射可以通過 LINQ 寫成這樣:
var data = (from DataRow row in dt.Rows
select new KeyValuePair<string, Data>
(
row["id"].ToString(),
new Data
{
Title = row["title"].ToString(),
Description = row["description"].ToString(),
Image = row["image"].ToString(),
Question = row["question"].ToString()
}
)).ToDictionary(pair => pair.Key, pair => pair.Value);
最后,您只需要創建一個JsonSerializerSettings來指定輸出應使用駝峰式大小寫:
var camelCasingSettings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() };
var json = JsonConvert.SerializeObject(data, camelCasingSettings);
我使用以下資料進行測驗:
var dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("title", typeof(string));
dt.Columns.Add("description", typeof(string));
dt.Columns.Add("image", typeof(string));
dt.Columns.Add("question", typeof(string));
dt.Rows.Add("1", "T1", "D1", "I1", "Q1");
dt.Rows.Add("n", "Tn", "Dn", "In", "Qn");
輸出如下所示:
{
"1":{
"title":"T1",
"description":"D1",
"image":"I1",
"question":"Q1"
},
"n":{
"title":"Tn",
"description":"Dn",
"image":"In",
"question":"Qn"
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364130.html
標籤:C# json PostgreSQL的
