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

如何使用System.Text.Json仅序列化对象属性内容,跳过属性名输出

问题根源

你当前的实现是为List<User>类型配置了自定义转换器,但序列化Request类时,System.Text.Json 会先输出Users属性名,再写入转换器返回的内容,自然会生成结构错误的JSON。


方案1:为Request类编写全局自定义转换器(推荐)

直接控制整个Request对象的序列化逻辑,完全跳过属性名输出阶段,代码如下:

public class RequestJsonConverter : JsonConverter<Request>
{
    public override Request Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // 不需要反序列化可直接抛出未实现异常
        throw new NotImplementedException();
    }

    public override void Write(Utf8JsonWriter writer, Request value, JsonSerializerOptions options)
    {
        writer.WriteStartObject();
        if (value.Users != null)
        {
            for (int i = 0; i < value.Users.Count; i++)
            {
                var user = value.Users[i];
                // 注意你之前的代码前缀多了个s,需求要求是user__开头而非users__
                writer.WriteNumber($"user__{i}__id", user.Id);
                writer.WriteString($"user__{i}__email", user.Email);
            }
        }
        writer.WriteEndObject();
    }
}

使用时在序列化配置中注册转换器即可:

var options = new JsonSerializerOptions
{
    Converters = { new RequestJsonConverter() }
};
string resultJson = JsonSerializer.Serialize(yourRequestInstance, options);

方案2:用中间字典中转(无需编写转换器)

如果你不想自定义转换器,可以先把Request对象转换为展平的字典,直接序列化字典就能得到符合要求的结构:

public static Dictionary<string, object> FlattenRequest(Request request)
{
    var dict = new Dictionary<string, object>();
    if (request.Users == null) return dict;
    for (int i = 0; i < request.Users.Count; i++)
    {
        var user = request.Users[i];
        dict.Add($"user__{i}__id", user.Id);
        dict.Add($"user__{i}__email", user.Email);
    }
    return dict;
}

序列化时直接调用方法即可:

var flattenDict = FlattenRequest(yourRequestInstance);
string resultJson = JsonSerializer.Serialize(flattenDict);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:18:02