提问人:zadam 提问时间:10/8/2008 最后编辑:Jason Plankzadam 更新时间:12/18/2019 访问量:957
对象初始值设定项语法以生成正确的 Json
Object Initializer syntax to produce correct Json
问:
我正在尝试使用 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
答:
1赞
Marc Gravell
10/8/2008
#1
在 json 中,“c” 中的 “c” : “One” 是属性名称。在 C# 世界中,无法动态创建属性名称(忽略 System.ComponentModel)。
基本上,我不认为你可以做你想做的事。
1赞
Amy B
10/8/2008
#2
提供的解决方案是为了正确性,而不是性能。
List<string> data = new List<string>()
{
"One",
"Two",
"Three"
};
string result =
"{ "
+
string.Join(", ", data
.Select(c => @"""" + c + @""": """ + c + @"""")
.ToArray()
) + " }";
1赞
mathieu
10/9/2008
#3
使用 JSON.NET 怎么样?
1赞
Alberto Chiesa
9/26/2013
#4
我之所以回答这个老问题,只是因为所有其他回答基本上都是错误或不完整的。
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'}"
评论