【发布时间】:2020-10-28 11:06:39
【问题描述】:
有一个以 Json 形式返回的列表,但希望将其格式化如下。无法弄清楚为什么我似乎无法正确格式化它。
[{
"AppFormName": "TFB Test Application",
"Questions": [{
"QuestionName": "How old are you?",
"QuestionType": 1
},
{
"QuestionName": "Where are you from?",
"QuestionType": 1
}]
},
{
"AppFormName": "HLL",
"Questions": [{
"QuestionName": "How old are you?",
"QuestionType": 1
},
{
"QuestionName": "Where are you from?",
"QuestionType": 1
},
{
"QuestionName": "What Game are you applying for?",
"QuestionType": 2
},
{
"QuestionName": "Do you agree to the clan rules",
"QuestionType": 3
}]
}]
这是我的代码当前生成的:
[
{
"AppFormName": "TFB Test Application",
"QuestionName": "How old are you?",
"QuestionType": 1
},
{
"AppFormName": "TFB Test Application",
"QuestionName": "Where are you from?",
"QuestionType": 1
},
{
"AppFormName": "HLL",
"QuestionName": "How old are you?",
"QuestionType": 1
},
{
"AppFormName": "HLL",
"QuestionName": "Where are you from?",
"QuestionType": 1
},
{
"AppFormName": "HLL",
"QuestionName": "What Game are you applying for?",
"QuestionType": 2
},
{
"AppFormName": "HLL",
"QuestionName": "Do you agree to the clan rules",
"QuestionType": 3
}
]
这是我试图序列化结果的控制器;
public ActionResult AccessToken(string authorizationCode)
{
UserFunctions.AccessToken(authorizationCode);
var results = UserFunctions.userApplications;
return Json(results , JsonRequestBehavior.AllowGet);
}
型号:
public class UserApplications
{
public string AppFormName { get; set; }
public string QuestionName { get; set; }
public int QuestionType { get; set; }
}
获取数据的函数;
public static List<Models.UserApplications> GetUserApplications(string ClientId)
{
userApplications.Clear();
var getUserApplications = getUserApplicationsSQL;
using (var conn = new MySqlConnection(dataConn))
{
using (var cmd = new MySqlCommand(getUserApplications, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@DiscordClientID", ClientId);
cmd.Connection.Open();
using (var dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while (dr.Read())
{
var u = new Models.UserApplications
{
AppFormName = dr["AppFormName"].ToString(),
QuestionName = dr["QuestionName"].ToString(),
QuestionType = dr.GetInt32(dr.GetOrdinal("TypeID")),
};
userApplications.Add(u);
}
}
}
}
return userApplications;
}
【问题讨论】:
-
Json()已经将对象序列化为 json,也描述了如何格式化 json here,但您的格式似乎不是标准格式,所以除非您想自己编写格式化程序我建议WriteIndented -
您正在对数据进行双重序列化。请注意
return Json(...将自动序列化您提供的任何内容。因此,如果您为其提供预序列化的 JSON,它将尝试再次对其进行序列化,从而导致垃圾。只需将results对象直接提供给该方法即可,无需手动涉及JsonSerializer。 -
@ADyson 最初是这样做的,但无法按照我要求的方式进行格式化,所以尝试了上面发布的方式。
-
我明白了。正如我们所解释的那样,您尝试的方式不会改善任何事情。你所做的只是让相同的过程发生两次。请恢复您的第一次尝试。然后,请向我们展示生成的 JSON 究竟是什么。最后请向我们展示您想要的实际 JSON。您现在的预期结果示例真的不清楚,因为它不是有效的 JSON。最好向我们展示一个有效的样本,以便我们确切地知道您的意思。
-
为了让大家更清楚,我将这些结构添加到主要问题中
标签: c# json asp.net-mvc ado.net