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

如何用Newtonsoft.Json将对象序列化为无字段名单键值对JSON?

解决方案:通过自定义JsonConverter实现目标序列化格式

不需要创建单项字典,你可以通过自定义Json.NET转换器来实现需求,直接将包含Key和Items的对象序列化为以Key值为键、Items为对应值的JSON结构。

步骤1:实现自定义JsonConverter

创建一个转换器,专门处理包含Key和Items属性的对象:

public class KeyItemsConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        // 验证对象是否包含Key和Items属性
        var hasKeyProp = objectType.GetProperty("Key") != null;
        var hasItemsProp = objectType.GetProperty("Items") != null;
        return hasKeyProp && hasItemsProp;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        // 获取Key和Items属性的值
        var keyValue = value.GetType().GetProperty("Key").GetValue(value)?.ToString();
        var itemsValue = value.GetType().GetProperty("Items").GetValue(value);

        // 手动构建目标JSON结构
        writer.WriteStartObject();
        writer.WritePropertyName(keyValue);
        serializer.Serialize(writer, itemsValue);
        writer.WriteEndObject();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        // 若不需要反序列化,直接抛出异常即可
        throw new NotImplementedException("暂不支持反序列化");
    }
}

步骤2:使用转换器序列化对象

针对匿名类的用法

直接在序列化时将转换器加入配置:

string keyValue = "keyValue1";
var itemsArray = new[] { new { Id = 1, Name = "Item1" }, new { Id = 2, Name = "Item2" } };

var anonymousObj = new
{
    Key = keyValue,
    Items = itemsArray
};

var jsonSettings = new JsonSerializerSettings
{
    Converters = { new KeyItemsConverter() },
    Formatting = Formatting.Indented // 可选,格式化输出
};

string targetJson = JsonConvert.SerializeObject(anonymousObj, jsonSettings);

针对普通类的用法

如果替换为普通类,可以直接给类添加[JsonConverter]特性,无需每次序列化都配置:

[JsonConverter(typeof(KeyItemsConverter))]
public class KeyItemsModel
{
    public string Key { get; set; }
    public object[] Items { get; set; } // 可根据实际需求改为泛型数组/集合
}

// 序列化示例
var model = new KeyItemsModel
{
    Key = "keyValue1",
    Items = new[] { new { Id = 1, Name = "Item1" }, new { Id = 2, Name = "Item2" } }
};

string targetJson = JsonConvert.SerializeObject(model, Formatting.Indented);

最终输出结果

两种方式都会得到你需要的JSON格式:

{
  "keyValue1": [
    {
      "Id": 1,
      "Name": "Item1"
    },
    {
      "Id": 2,
      "Name": "Item2"
    }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:52:55