C#中如何转义关键字访问BlockCypher API返回的JSON字段
解决C#中JSON字段名与关键字冲突的问题
嘿,这个问题我之前也碰到过!当JSON里的字段名刚好撞上C#的关键字时,确实挺闹心的,不过有几个靠谱的解决方案可以选:
1. 用@符号直接转义关键字
C#允许在标识符前加@来转义关键字,编译器会把它当作普通变量名处理,这是最省事的改法:
HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync(endpoint); if (response.IsSuccessStatusCode) { string json = await response.Content.ReadAsStringAsync(); dynamic dynamicJson = JsonConvert.DeserializeObject(json); return new MyAddress() { Address = (string)dynamicJson.address, PublicKey = (string)dynamicJson.@public, // 加@转义关键字 PrivateKey = (string)dynamicJson.@private // 加@转义关键字 }; }
2. 使用索引器访问字段
就像你提到的,直接用字符串索引访问dynamic对象的属性,完全避开关键字的限制:
HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync(endpoint); if (response.IsSuccessStatusCode) { string json = await response.Content.ReadAsStringAsync(); dynamic dynamicJson = JsonConvert.DeserializeObject(json); return new MyAddress() { Address = (string)dynamicJson.address, PublicKey = (string)dynamicJson["public"], // 索引器方式访问 PrivateKey = (string)dynamicJson["private"] // 索引器方式访问 }; }
这种方式不仅能解决关键字问题,遇到带特殊字符的字段名也同样适用。
3. 强类型实体类(生产环境推荐)
如果是正式项目,更建议用强类型实体类配合JsonProperty特性做字段映射,既能避开关键字问题,还能获得编译时类型检查,减少运行时错误:
先定义对应的实体类:
public class BlockCypherAddress { [JsonProperty("address")] public string Address { get; set; } [JsonProperty("public")] // 映射JSON的"public"字段 public string PublicKey { get; set; } [JsonProperty("private")] // 映射JSON的"private"字段 public string PrivateKey { get; set; } }
然后修改反序列化代码:
HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync(endpoint); if (response.IsSuccessStatusCode) { string json = await response.Content.ReadAsStringAsync(); var cypherAddress = JsonConvert.DeserializeObject<BlockCypherAddress>(json); return new MyAddress() { Address = cypherAddress.Address, PublicKey = cypherAddress.PublicKey, PrivateKey = cypherAddress.PrivateKey }; }
这种方式的优势很明显:代码更健壮,IDE能提供属性补全提示,后期维护也更方便。
总结
- 快速测试或小脚本场景,用
@转义或索引器访问最快捷; - 正式项目优先选强类型实体类,安全性和可维护性更高。
内容的提问来源于stack exchange,提问作者Eutherpy
相关产品推荐
相关产品推荐

