如何使用C#从Controller反向JSON.Stringify [英] How to Reverse JSON.Stringify from Controller using C#
问题描述
我将表单数据发送为 JSON.Stringify($("ourForm").serializeArray())(我找不到其他将表单发送到控制器的方法)>
那么我该如何使用c#在控制器端逆转此Stringify?
字符串是这样的(视图中有2个问题模块):
"[{{\" name \:\" question_string \,\" value \:\" \},{\" name \:\" A \,\" value \:\ "\"},{\"name \":\"B \",\"value \":\"\"},{\"name \":\"C \",\"value \":\ "\"},{\"name \":\"D \",\"value \":\"\"},{\"name \":\"E \",\"value \":\ "\"},{\"name \":\"correct_answer \",\"value \":\"\"},{\"name \":\"question_string \",\"value \":\ "\"},{\"name \":\"A \",\"value \":\"\"},{\"name \":\"B \",\"value \":\ "\"},{\"name \":\"C \",\"value \":\"\"},{\"name \":\"D \",\"value \":\ "\"},{\"name \":\"E \",\"value \":\"\"},{\"name \":\"correct_answer \",\"value \":\ "\"}]"
ViewModel:
public class Questions
{
[Display(Name ="QUESTION HERE")]
public string question_string { get; set; }
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
public string D { get; set; }
public string E { get; set; }
[Display(Name ="CORRECT ANSWER")]
public string correct_answer { get; set; }
}
这可以通过 Newtonsoft.Json
.创建POCO
进行反序列化是最简单的(尽管如果需要,使用dynamic
类型进行反序列化也很棘手).
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
// Create model we can deserialize to
public class FormData
{
public string Name { get; set; }
public string Value { get; set; }
public FormData(string name, string val)
{
Name = name;
Value = val;
}
}
public class Program
{
public static void Main()
{
var formData = "[{\"name\":\"question_string\",\"value\":\"\"},{\"name\":\"A\",\"value\":\"\"},{\"name\":\"B\",\"value\":\"\"},{\"name\":\"C\",\"value\":\"\"},{\"name\":\"D\",\"value\":\"\"},{\"name\":\"E\",\"value\":\"\"},{\"name\":\"correct_answer\",\"value\":\"\"},{\"name\":\"question_string\",\"value\":\"\"},{\"name\":\"A\",\"value\":\"\"},{\"name\":\"B\",\"value\":\"\"},{\"name\":\"C\",\"value\":\"\"},{\"name\":\"D\",\"value\":\"\"},{\"name\":\"E\",\"value\":\"\"},{\"name\":\"correct_answer\",\"value\":\"\"}]";
var results = JsonConvert.DeserializeObject<List<FormData>>(formData);
foreach (var datas in results)
{
Console.WriteLine(datas.Name);
}
}
}
/* OUTPUT:
question_string
A
B
C
D
E
correct_answer
question_string
A
B
C
D
E
correct_answer
*/
I am sending my formdata as JSON.Stringify($("ourForm").serializeArray()) (I couldn't find any other way to send the form to the controller)
So how can I reverse this Stringify on the Controller side, using c# ?
The string comes like this (there are 2 question modules in the view):
"[{\"name\":\"question_string\",\"value\":\"\"},{\"name\":\"A\",\"value\":\"\"},{\"name\":\"B\",\"value\":\"\"},{\"name\":\"C\",\"value\":\"\"},{\"name\":\"D\",\"value\":\"\"},{\"name\":\"E\",\"value\":\"\"},{\"name\":\"correct_answer\",\"value\":\"\"},{\"name\":\"question_string\",\"value\":\"\"},{\"name\":\"A\",\"value\":\"\"},{\"name\":\"B\",\"value\":\"\"},{\"name\":\"C\",\"value\":\"\"},{\"name\":\"D\",\"value\":\"\"},{\"name\":\"E\",\"value\":\"\"},{\"name\":\"correct_answer\",\"value\":\"\"}]"
ViewModel:
public class Questions
{
[Display(Name ="QUESTION HERE")]
public string question_string { get; set; }
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
public string D { get; set; }
public string E { get; set; }
[Display(Name ="CORRECT ANSWER")]
public string correct_answer { get; set; }
}
This can be achieved with Newtonsoft.Json
. It is easiest to create a POCO
to deserialize to (although you can get tricky with deserializing using the dynamic
type, if you wanted).
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
// Create model we can deserialize to
public class FormData
{
public string Name { get; set; }
public string Value { get; set; }
public FormData(string name, string val)
{
Name = name;
Value = val;
}
}
public class Program
{
public static void Main()
{
var formData = "[{\"name\":\"question_string\",\"value\":\"\"},{\"name\":\"A\",\"value\":\"\"},{\"name\":\"B\",\"value\":\"\"},{\"name\":\"C\",\"value\":\"\"},{\"name\":\"D\",\"value\":\"\"},{\"name\":\"E\",\"value\":\"\"},{\"name\":\"correct_answer\",\"value\":\"\"},{\"name\":\"question_string\",\"value\":\"\"},{\"name\":\"A\",\"value\":\"\"},{\"name\":\"B\",\"value\":\"\"},{\"name\":\"C\",\"value\":\"\"},{\"name\":\"D\",\"value\":\"\"},{\"name\":\"E\",\"value\":\"\"},{\"name\":\"correct_answer\",\"value\":\"\"}]";
var results = JsonConvert.DeserializeObject<List<FormData>>(formData);
foreach (var datas in results)
{
Console.WriteLine(datas.Name);
}
}
}
/* OUTPUT:
question_string
A
B
C
D
E
correct_answer
question_string
A
B
C
D
E
correct_answer
*/
这篇关于如何使用C#从Controller反向JSON.Stringify的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!