javascript - 如何使用变量值将 List<object> 序列化为 JSON?

标签 javascript c# json serialization asp.net-mvc-5

我需要序列化对象列表,但不使用“默认方式”:

假设我有 C# 类:

public class Test
{
    public string Key;
    public string Value;
}
List<Test> tests;

如果我序列化此列表(return Json(tests.ToArray())),我会得到这个

{"Key": "vKey1", "Value": "value1"}, {"Key": "vKey2", "Value": "value2"}

相反,我想要这个结果:

{"vKey1": "value1"}, {"vKey2": "value2"}

编辑:

这是所需的输出:

{"vKey1": "value1", "vKey2": "value2"}

我希望第一个变量的内容是 JS 属性名称,第二个变量的内容是其值。

有什么想法吗?我见过这个解决方案:

How do I convert a dictionary to a JSON String in C#?

但我不想将对象列表转换为字典,这样我就可以使用 string.format 解决方案再次转换它。

谢谢!

最佳答案

如果您正在使用 JSON.Net(我假设您使用的是 MVC 5),您可以将列表转换为

List<Dictionary<string, string>>

每个列表条目应该是一个新字典,该字典中有一个条目。 JSON.Net 会将属性名称替换为您的字典键值,从而为您提供所需的结构。

public ActionResult Test()
{
    tests = new List<Test>
    {
        new Test {Key = "vKey1", Value = "value1"},
        new Test {Key = "vKey2", Value = "value2"}
    };

    var tests2 = new List<Dictionary<string, string>>();

    tests.ForEach(x => tests2.Add(new Dictionary<string, string>
    {
        { x.Key, x.Value }
    }));

    return Json(tests2, JsonRequestBehavior.AllowGet);
}

生成以下 JSON:

[{"vKey1":"value1"},{"vKey2":"value2"}]

编辑:

反射(reflect)所需的解决方案:

tests.ForEach(x =>tests2.Add(x.Name, x.Value));

关于javascript - 如何使用变量值将 List<object> 序列化为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28159719/

相关文章:

javascript - 隐身灯塔性能问题

javascript - 如何通过从数据库中获取像素值来为图像着色

c# - 在 ASP.NET C# 中使用正则表达式进行 Imgur ID 匹配

c# - 在 C# 中创建 outlook .msg 文件

java - 是否有用于包装 Text/XML/JSON 数据服务的语言中立 API 生成器?

javascript - 网络音频API : discover a node's connections

javascript - 为动态加载的 "widget"重新处理代码?

javascript - C#制作欲望Json格式

json - 从 MongoDB Cloud 导出到本地 MongoDB ("$oid is not valid for storage."错误)

java - 为简单的数据结构创建单独的类在 Objective-C 中是矫枉过正的