[英]converting C# Lists (more than one) to JavaScript Associative Arrays
我在追求这样的事情:
我在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}
]
正是那些围绕名称和值的多余“”杀死了key:value关联。 有任何想法吗?
谢谢!
您可以使用Json.NET序列化程序实现所需的功能。 签出下一个代码,并根据需要进行更改:
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}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.