我正在尝试使用linq将数据列表整形为特定形状,以便从ajax调用返回为Json。
鉴于此数据:
var data = new List<string>();
data.Add("One");
data.Add("Two");
data.Add("Three");
这段代码:**哪个不正确,需要修复!! **
var shaped = data.Select(c =>
new { c = c }
).ToList();
serializer.Serialize(shaped,sb);
string desiredResult = sb.ToString();
我希望desiredResult
成为:
{
"One": "One",
"Two": "Two",
"Three": "Three"
}
但目前是:
{ "c" : "One" },{ "c" : "Two" }
等
一个问题是,在对象初始值设定项的左侧,我想要c
的值,而不是c
本身......
答案 0 :(得分:1)
在json中,“c”中的“c”:“One”是属性名称。在C#世界中,您无法动态创建属性名称(忽略System.ComponentModel)。
基本上,我认为你不能做你想做的事。
答案 1 :(得分:1)
解决方案提供正确性而非性能。
List<string> data = new List<string>()
{
"One",
"Two",
"Three"
};
string result =
"{ "
+
string.Join(", ", data
.Select(c => @"""" + c + @""": """ + c + @"""")
.ToArray()
) + " }";
答案 2 :(得分:1)
如何使用JSON.NET?
答案 3 :(得分:0)
我正在回答这个老问题,因为所有其他答案基本上都是错误的或不完整的。
JSON非常简单,基本上,要获得所需的JSON,您需要掌握JSON数组之间的区别:
["one", "two", "three"]
和JSON对象/字典(对象和字典真的相同):
{"a": "one", "b": "two", "c": 3}
请注意“c”元素的类型不同,但这对Javascript来说不是问题。
鉴于此,我在.NET下使用的几乎所有序列化程序(几乎总是伟大的JSON.NET库)都将.NET对象或.NET字典转换为JSON对象。
所以你需要的是将List转换为Dictionary,然后用字典或对象提供序列化器。 另一个问题是为什么你想要一本价值等于钥匙的字典,但即使我很可疑,我也会接受这一点。
给出的例子:
List<string> source = new List<string>() { "a", "b", "c" };
Dictionary<string, string> dict = source.ToDictionary(el => el, el => el);
var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(dict);
// jsonString should be "{'a':'a', 'b':'b', 'c':'c'}", with more or less whitespace depending on formatting