【发布时间】:2021-06-06 07:33:42
【问题描述】:
问题
我从服务器接收到格式为 {"A": 'Pelle', "B": 55, "C": 5.5} 的 JSON 包,需要将其映射到以下格式的实体类:
class EntityAttributes
{
public string Name { get; set; }
public int Level { get; set; }
public float Strength { get; set; }
}
JSON中的属性名“A”、“B”、“C”应按照如下类进行映射:
class Constants
{
public const byte NAME = 65; // ASCII "A"
public const byte LEVEL = 66; // ASCII "B"
public const byte STRENGTH = 67; // ASCII "C"
}
其中 65 是“A”的 ASCII 字节表示,“B”的 66 和“C”的 67。
我被困在哪里(我不知道这是否是正确的方法):
我一直在尝试使用JSON NET FOR UNITY,它允许您使用自定义名称将 JSON 反序列化为一个类:
class EntityAttributes
{
[[JsonProperty("A")]]
public string Name { get; set; }
[[JsonProperty("B")]]
public int Level { get; set; }
[[JsonProperty("C")]]
public float Strength { get; set; }
}
但是,我不想在注释中硬编码“A”、“B”和“C”,因为这些将来可能会发生变化。也不可能(afaik)在装饰器中从字节转换为字符串,因为只允许 常量表达式。
知道我应该如何解决这个问题吗?
【问题讨论】:
-
为什么你的常量不能简单地是字符串?
-
常量的服务器内部表示是字节。必须同步服务器常量和客户端常量已经有点麻烦了,在此之上添加一个字节 -> 字符转换并不理想。
-
为什么服务器常量不能是字符串? / 为什么服务端不能有常量字节和字符串之间的非常量映射?
-
也许可以,但是改变内部服务器结构,使常量必须匹配客户端内部结构的方法名称真的有意义吗?
-
好吧,在一方面,你必须这样做..要么服务器必须提供客户端所期望的客户端,要么必须处理服务器提供的任何东西......无论哪种方式,如果一个一边改变了,另一边也必须改变。可能没有办法解决这个问题