序列化成一个键值字典与Json.Net

本文关键字:字典 键值 Json Net 一个 序列化 | 更新日期: 2023-09-27 18:04:05

你好,我正在尝试将对象序列化为散列,但我没有得到我想要的。

代码:

class Data{
  public string Name;
  public string Value;
}
//...
var l=new List<Data>();
l.Add(new Data(){Name="foo",Value="bar"});
l.Add(new Data(){Name="biz",Value="baz"});
string json=JsonConvert.SerializeObject(l);

当我这样做时,json结果值为

[{"Name":"foo","Value":"bar"},{"Name":"biz","Value":"baz"}]

然而,我想要的结果是:

[{"foo":"bar"},{"biz":"baz"}]

我是如何让JSON输出成那样的?

序列化成一个键值字典与Json.Net

在方法的最后一行试试:

string json = JsonConvert.SerializeObject(l.ToDictionary(x=>x.Name, y=>y.Value));

Result: {"foo":"bar", "biz":"baz"}

对于结果:[{"foo":"bar"},{"biz":"baz"}],您可以这样做…

string json = JsonConvert.SerializeObject(new object[]{new {foo="bar"}, new {biz = "baz"} });

string json = JsonConvert.SerializeObject(new object[]{new Data1{foo="bar"}, new Data2{biz = "baz"} });

第一个结果假设相同的数据类型,因此结果是同一个数组的一部分。第二个是不同的数据类型,所以你会得到一个不同的数组

您可以创建自己的键值列表像

 class mylist:Dictionary<string,object>
{
}
var l=new mylist<Data>();
l.Add("foo","bar");

它应该能解决你的问题