如何转换键值对json字符串响应中的字符串列表?

时间:2017-07-13 13:42:42

标签: c#

下面是我的字符串列表:

List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" });

现在我想以下面的输出形式将上面的列表返回到Web服务:

{
 "element1" : "",
 "element2" : "",
 "element3" : "",
}

我想在我的网站上显示如下所示的输出:

{
 "element1" : "",
 "element2" : "",
 "element3" : "",
}

这就是我现在正在做的事情:

 string output = "{" + Environment.NewLine;
            foreach (var item in myList)
            {
                output += $"\"{item}\" : \"\"," + Environment.NewLine;
            }
            output = output.Remove(output.Length - 1) + "}";

但是当我有40-50个记录时,我的循环将运行40-50次,我试图避免。

我甚至试图用这个:

 string output = JsonConvert.SerializeObject(myList); 

但上面没有提供我想要的确切输出格式。

任何人都可以建议我做任何更好的方法来避免forloop并减少代码以产生预期的输出吗?

2 个答案:

答案 0 :(得分:5)

这应该做你想要的:

string output = JsonConvert.SerializeObject(
                    mylist.ToDictionary(key => key, v => string.Empty));

使用ToDictionary()我们会从您的列表中创建Dictionary<T1, T2>(在您的情况下为Dictionary<string, string>)。我们让Key等于列表中的项目,而Value只是一个空字符串。

小提琴here

修改 如果需要缩进格式,请将第二个参数传递给SerializeObject:

string output = JsonConvert.SerializeObject(
                    mylist.ToDictionary(key => key, v => string.Empty)
                    Formatting.Indented);

答案 1 :(得分:2)

您可以简单地使用.NET内置类,而无需任何第三方库: 使用JavaScriptSerializer

var list = new List<string>() { "element1", "element2", "element3" };
var dic = list.ToDictionary(k => k, v => string.Empty);
Console.WriteLine(new JavaScriptSerializer().Serialize(dic));

enter image description here

注意 不要忘记添加System.Web.Extensions作为项目的参考