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

使用Newtonsoft JSON反序列化时,能否同时识别JsonProperty与C#属性名?

解决方案:给属性添加多个JsonProperty特性

当然可以做到!Newtonsoft.Json(Json.NET)支持给同一个属性标注多个JsonProperty特性,每个特性指定一个可接受的JSON键名,这样反序列化时不管JSON里是ExternalId还是CustomerName,都会正确映射到你的ExternalId属性上。

修改后的MyClass代码

public class MyClass
{
    [JsonProperty("CustomerName")]
    [JsonProperty("ExternalId")]
    public string ExternalId { get; set; }
}

验证代码示例

你可以用下面的代码测试两种JSON的反序列化效果:

// 反序列化第一个JSON
var json1 = "{ \"ExternalId\":\"Test1\" }";
var obj1 = JsonConvert.DeserializeObject<MyClass>(json1);
Console.WriteLine(obj1.ExternalId); // 输出 Test1

// 反序列化第二个JSON
var json2 = "{ \"CustomerName\":\"Test2\" }";
var obj2 = JsonConvert.DeserializeObject<MyClass>(json2);
Console.WriteLine(obj2.ExternalId); // 输出 Test2

原理说明

当你给属性添加多个JsonProperty特性时,Json.NET会把所有指定的名称都视为该属性的有效JSON键名。反序列化时,只要JSON中存在其中任意一个名称的键,就会将对应的值赋值给这个属性。

如果因为某些原因你无法修改类的源代码(比如类是第三方库提供的),还可以通过自定义IContractResolver来实现相同的效果,但上面的特性方式是最直接、最简洁的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:32:40