如何使用C#从Controller反向JSON.Stringify [英] How to Reverse JSON.Stringify from Controller using C#

查看:359
本文介绍了如何使用C#从Controller反向JSON.Stringify的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将表单数据发送为 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).

[Example Here]

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆