将c#列表(多于一个)转换为JavaScript关联数组

本文关键字:转换 JavaScript 关联 数组 于一个 列表 | 更新日期: 2023-09-27 18:15:50

我在寻找这样的东西:

我在c#中有多个列表,像这样:

List<string> Names = new List<string>()
{
    "Name1",
    "Name2",
    "Name3"
};
List<double> Values = new List<double>()
{
    1,
    2,
    3
};

我想把它们序列化成一个数组在javascript(我实际上是寻找返回一个字符串)得到这样的东西:

[
{ name: "Name1", value: 1 },
{ name: "Name2", value: 2 },
{ name: "Name3", value: 3 }
]

到目前为止,我已经试过了:

public class bmData
{
    string _name;
    public string name
    { 
        get { return this._name; } 
        set { this._name = value; }
    }
    double _value;
    public double value
    {
        get { return this._value; }
        set { this._value = value; }
    }
}

将它们压缩在一起并包装到一个"数据项"类中。出于其他原因,我想保留这个功能。然后我将键值对压缩到这个新类中:

List<bmData> namesValues = Names.Zip(Values, (x, y) => new bmData{name = x, value = y}).ToList();

最后我尝试像这样序列化它:

var serializer = new JavaScriptSerializer();
string jsData = serializer.Serialize(namesValues);

但是这个返回值是这样的:

[
{"name":"Name1","value":1},
{"name":"Name2","value":2},
{"name":"Name3","value":3}
]

名字和值周围那些额外的"正在扼杀键:值的关联。什么好主意吗?

谢谢!

将c#列表(多于一个)转换为JavaScript关联数组

您可以使用Json实现所需的功能。净序列化器。检查下一个代码并根据您的需要更改它:

List<bmData> namesValues = new List<bmData>
{
    new bmData { name = "Name1", value= 1 },
    new bmData { name = "Name2", value= 2 },
    new bmData { name = "Name3", value= 3 }
};
string jsData = "[]";
var serializer = new JsonSerializer();
using (var stringWriter = new StringWriter())
{
    using (var writer = new JsonTextWriter(stringWriter))
    {
        writer.QuoteName = false;
        serializer.Serialize(writer, namesValues);
    }
    jsData = stringWriter.ToString();
}

然而,我必须指出,这将产生一个无效的JSON,但这是你所需要的。

结果:

[
{name:"Name1",value:1.0},
{name:"Name2",value:2.0},
{name:"Name3",value:3.0}
]