You need to enable JavaScript to run this app. C#对象序列化使用自定义属性名且兼容原属性名反序列化问题
优惠活动
大模型
产品
解决方案
定价
更多

C#对象序列化使用自定义属性名且兼容原属性名反序列化问题

解决方案

方案1:使用 System.Text.Json(.NET Core 3.0+ / .NET 5+ 内置)

.NET 自带的序列化库可通过原生属性直接满足需求:

  • 用[JsonPropertyName]指定序列化输出的自定义属性名
  • 用[JsonAlias]指定反序列化时可识别的别名(填入原属性名即可)

代码示例:

using System.Text.Json.Serialization;

public class YourClass
{
    [JsonPropertyName("KLM")]
    [JsonAlias("ABC")]
    public string ABC { get; set; } = "Test1";

    [JsonPropertyName("NOP")]
    [JsonAlias("DEF")]
    public string DEF { get; set; } = "Test2";

    [JsonPropertyName("QRS")]
    [JsonAlias("GHI")]
    public string GHI { get; set; } = "Test3";
}

实现效果:

  • 序列化输出:{"KLM":"Test1","NOP":"Test2","QRS":"Test3"}
  • 反序列化时同时支持识别自定义属性名和原属性名,两种格式的JSON都可正常解析

方案2:使用 Newtonsoft.Json(Json.NET)

如果使用Newtonsoft.Json,可通过自定义ContractResolver实现别名兼容,无需修改你已有的属性标注:

  1. 保留你现有的属性定义:
using Newtonsoft.Json;

public class YourClass
{
    [JsonProperty(PropertyName = "KLM")]
    public string ABC { get; set; } = "Test1";

    [JsonProperty(PropertyName = "NOP")]
    public string DEF { get; set; } = "Test2";

    [JsonProperty(PropertyName = "QRS")]
    public string GHI { get; set; } = "Test3";
}
  1. 新增自定义属性解析器:
public class AliasContractResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        var property = base.CreateProperty(member, memberSerialization);
        // 将原属性名加入反序列化识别列表
        property.AlternateNames.Add(member.Name);
        return property;
    }
}
  1. 反序列化时引入配置即可:
// 反序列化配置
var deserializeSettings = new JsonSerializerSettings
{
    ContractResolver = new AliasContractResolver()
};

// 反序列化带原属性名的JSON
var obj = JsonConvert.DeserializeObject<YourClass>(inputJson, deserializeSettings);
// 序列化直接输出自定义属性名,无需额外配置
var outputJson = JsonConvert.SerializeObject(obj);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 01:24:00