问题描述
有一个列表,该列表以Json返回,但要按照以下格式设置。无法弄清楚我的一生,为什么我似乎无法正确设置其格式。
[{
"AppFormName": "TFB Test Application","Questions": [{
"QuestionName": "How old are you?","QuestionType": 1
},{
"QuestionName": "Where are you from?","QuestionType": 1
}]
},{
"AppFormName": "HLL",{
"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?",{
"AppFormName": "TFB Test Application","QuestionName": "Where are you from?",{
"AppFormName": "HLL","QuestionName": "What Game are you applying for?","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结构的代码。使用Linq可以相对轻松地完成此操作。然后您需要在操作方法中返回该列表:
public ActionResult AccessToken(string authorizationCode)
{
UserFunctions.AccessToken(authorizationCode);
var results = UserFunctions.userApplications;
var appFormList = results.GroupBy(s => s.AppFormName).Select(g => new
{
AppFormName = g.Key,Questions = g.Select(a => new
{
a.QuestionName,a.QuestionType
})
});
return Json(appFormList,JsonRequestBehavior.AllowGet);
}
实时演示:https://dotnetfiddle.net/sRIy72
(使用Linq的想法要记入this post。)
,这可以简单地通过分组来实现:
<a href="[acf field="url"]>BUTTON</a>