1

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

一个问题是,在对象初始值设定项的左侧,我想要的是 的值c,而不是c它本身......

4

4 回答 4

1

在 json 中,“c”中的“c”:“One”是属性名称。在 C# 世界中,您不能动态创建属性名称(忽略 System.ComponentModel)。

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

于 2008-10-08T06:05:56.137 回答
1

提供的解决方案是为了正确性,而不是性能。

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

        string result =
            "{ "
            +
            string.Join(", ", data
              .Select(c => @"""" + c + @""": """ + c + @"""")
              .ToArray()
            ) + " }";
于 2008-10-08T13:44:23.467 回答
1

使用JSON.NET怎么样?

于 2008-10-09T08:13:13.727 回答
1

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

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 应该是"{'a':'a', 'b':'b', 'c':'c'}", 或多或少的空格取决于格式

于 2013-09-26T08:14:43.900 回答