【问题标题】:How do I add `+` to a property name in C#?如何在 C# 中将 `+` 添加到属性名称?
【发布时间】:2023-03-03 09:04:29
【问题描述】:

如何在 C# 中将属性或变量名称声明为 fg+

public string fg+ { get; set; }

我收到fg+ 作为来自 JSON 的响应中的字段"fg+": "103308076644479658279"

我正在使用一个类对其进行反序列化。如何从 JSON 中读取?

【问题讨论】:

  • @ChrisCirefice:希望使用obj["key"] 语法而不是obj.key 访问值的人。
  • @dan04 当然可以,但是如果您使用诸如 Google GSON 之类的 JSON 库将 JSON 映射到 Java 对象或用于 C# 的 Json.NET,那么您通常会遇到很多麻烦没有明显原因的奇怪异常。是的,JSON 键可以是字符串,但这不应阻止创建要使用的 JSON 的人考虑谁必须解析它。在我看来,作为标识符的东西最好避免使用特殊符号。除非我故意惹恼别人,否则我永远不会创建如此奇怪的 JSON。
  • @sleblanc 根据我使用 JSON 解析库的经验,它完全取决于您的目标消费者。例如,在使用 Gson Java 库将 JSON 解析为 Java 对象时,使用名为 end 的 JSON 键不会有问题,因为它不是 Java 关键字。但是,您不能将 Java 变量命名为 for,因为它是循环的关键字。诚然,像 Gson 这样的大多数库都允许覆盖键,因此您可以拥有一个名为 forDuration 的 Java 变量,对应于 JSON 键 for,但如果它们很容易避免,为什么还要潜在地导致问题呢?
  • 这听起来像是糟糕的设计。当我使用编码方案时,我不应该考虑编写解析器的语言规则。将 JSON 字段直接映射到变量听起来是一个非常糟糕的决定。

标签: c# json


【解决方案1】:

这样的变量名在 C# 中是不合法的。

如果您使用Json.NET 反序列化您的数据,您可以使用JsonProperty 属性为其指定一个自定义名称:

[JsonProperty("fg+")]
public string Fg { get; set; }

【讨论】:

  • 你的答案是正确的..但我认为key value pair字典会在c#中支持它。
  • @PankajParkar 好吧,他的问题不是 “我怎样才能将我的 JSON 一般反序列化为 Dictionary<string,string>,他想知道如何反序列化它直接到属性。当然,前者是可能的。
猜你喜欢
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2021-11-15
  • 1970-01-01
相关资源
最近更新 更多