You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

序列化List<KeyValuePair>时如何去除'Key'/'Value'字段?

解决方案

你当前使用KeyValuePair<string, int>存储数据,序列化时会默认输出它的Key和Value属性,所以得到的是带这两个字段的JSON结构。要生成目标格式,只需更换存储数据的结构即可,以下是几种简单高效的实现方式:

方法一:使用匿名类型(一次性场景推荐)

直接通过LINQ将每个元素转换为包含ID字段的匿名对象,无需手动循环:

// 直接生成目标结构的列表
var deletionBody = _elementList.Select(item => new { ID = item }).ToList();
// 序列化后得到目标格式
string json = JsonConvert.SerializeObject(deletionBody);

序列化结果:

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

方法二:定义自定义类(复用场景推荐)

如果这个数据结构需要在多处使用,建议定义一个明确的类,提升代码可读性和可维护性:

// 定义类
public class IdEntity
{
    public int ID { get; set; }
}

// 生成列表
var deletionBody = _elementList.Select(item => new IdEntity { ID = item }).ToList();
// 序列化
string json = JsonConvert.SerializeObject(deletionBody);

不推荐的复杂方式(自定义转换器)

如果一定要保留KeyValuePair结构,需要编写自定义JSON转换器,但这种方式没必要,会增加代码复杂度,仅作参考:

public class KeyValuePairConverter : JsonConverter<KeyValuePair<string, int>>
{
    public override void WriteJson(JsonWriter writer, KeyValuePair<string, int> value, JsonSerializer serializer)
    {
        writer.WriteStartObject();
        writer.WritePropertyName(value.Key);
        writer.WriteValue(value.Value);
        writer.WriteEndObject();
    }

    public override KeyValuePair<string, int> ReadJson(JsonReader reader, Type objectType, KeyValuePair<string, int> existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        // 反序列化逻辑(如果需要的话)
        var jObj = JObject.Load(reader);
        var key = jObj.Properties().First().Name;
        var val = (int)jObj.Properties().First().Value;
        return new KeyValuePair<string, int>(key, val);
    }
}

// 使用转换器序列化
var settings = new JsonSerializerSettings();
settings.Converters.Add(new KeyValuePairConverter());
string json = JsonConvert.SerializeObject(_deletionBody, settings);

最优实现建议

优先选择方法一(匿名类型+LINQ),代码最简洁,完全满足需求;如果需要重复使用该数据结构,再考虑方法二的自定义类方案。

内容的提问来源于stack exchange,提问作者Soumya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:25:24