.net 当List序列化为Json时是否删除“key”、“value”关键字< KeyValuePair>?

dly7yett  于 2023-03-04  发布在  .NET
关注(0)|答案(4)|浏览(142)

我有一个列表,我要向其中添加元素,如下所示,

foreach (int item in _elementList)
            {
                _deletionBody.Add(new KeyValuePair<string, int>("ID", item));
            }

当我将其序列化为json时,JsonConvert.SerializeObject(_deletionBody)
我越来越

[{"Key":"ID","Value":8000},{"Key":"ID","Value":8001}]

但我需要的格式是

[{"ID":8000},{"ID":8001}]

我如何进入上述格式?或者有更好的方法吗?

pbwdgjma

pbwdgjma1#

根据您提供的内容,当您使用JsonConvert.SerializeObject序列化此列表时,它会提供一个JSON数组,其中每个元素都是具有两个属性的对象:"键"和"值"。
为了得到你想要的输出格式,你可以修改你的代码来创建只带有"ID"属性的对象,而不是使用键-值对,下面是一个例子:

List<object> deletionBody = new List<object>();
foreach (int item in _elementList)
{
    deletionBody.Add(new { ID = item });
}
string json = JsonConvert.SerializeObject(deletionBody);

这将创建一个具有单个"ID"属性的对象列表,当您使用JsonConvert.SerializeObject序列化它时,它应该会提供您正在寻找的输出格式。
希望这有帮助!🤗

mf98qq94

mf98qq942#

你根本不需要任何foreach循环,只需要使用下面的代码:

var json = JsonConvert.SerializeObject(_elementList.Select(item => new { ID = item }));
ymzxtsji

ymzxtsji3#

下面的代码应该可以解决这个问题。它创建一个匿名对象,该对象具有您要使用的结构,然后序列化该对象

var list = new List<KeyValuePair<string, int>>();

        list.Add(new KeyValuePair<string, int>("ID", 8001));

        var toSerialize = list.Select(x => new { ID = x.Value });

        var json = JsonConvert.SerializeObject(toSerialize);
lvmkulzt

lvmkulzt4#

它们不匹配,因为您的json表示KeyValuePairs的列表,而预期的json表示Objects的列表,其中包含名为IDproperty

public class SomeClass
{
    public int ID { get; set; }
}

var items = new List<SomeClass>()
{
    new SomeClass() { ID = 8000} ,
    new SomeClass() { ID = 8001} ,
};

string json = Newtonsoft.Json.JsonConvert.SerializeObject(items);

如果您仍然需要包含数据的密钥,只需使用[JsonIgnore]标记即可。请注意,System.TextNewtonsoft.Text中都存在JsonIgnore,因此请确保相应地引用。

[JsonIgnore]
public string Key { get; set; }

相关问题