我正在尝试使用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"
}

但目前是:

{&quot; c&quot; :“一个” },{&quot; c&quot; :“两个” }

一个问题是在对象初始化程序的左侧我想要 c 的值,而不是 c 本身......

有帮助吗?

解决方案

解决方案提供正确性而非性能。

        List<string> data = new List<string>()
        {
            "One",
            "Two",
            "Three"
        };

        string result =
            "{ "
            +
            string.Join(", ", data
              .Select(c => @"""" + c + @""": """ + c + @"""")
              .ToArray()
            ) + " }";

其他提示

在json中,“c”表示“c”。在“c”中:“一个”是属性名称。在C#世界中,您无法动态创建属性名称(忽略System.ComponentModel)。

基本上,我认为你不能做你想做的事。

使用 JSON.NET 怎么样?

我正在回答这个老问题,因为所有其他答案基本上都是错误的或不完整的。

JSON非常简单,基本上,要获得所需的JSON,您需要掌握JSON数组之间的区别:

["one", "two", "three"]

和JSON对象/字典(对象和字典真的相同):

{"a": "one", "b": "two", "c": 3}

请注意“c”。 element是不同类型的,但这对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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top