【发布时间】:2020-04-09 23:49:11
【问题描述】:
我有一个类,其中包含一个名为“productName”的字段。我想允许该字段使用别名(“名称”)。
现在,我可以通过添加另一个字段和一些逻辑来做到这一点,但也许有更简洁的方法?
现在的构造函数是这样的:
[JsonConstructor]
public OsInfo(string name = null, string platform = null, string version = null) {
目标是接受这两个 JSON 块:
使用“名称”:
'os': {
'platform': 'Android-armv7-a',
'name': 'Android',
'version': 'Android 7.1.2'
}
使用“产品名称”:
'os': {
'platform': 'Android-armv7-a',
'productname': 'Android',
'version': 'Android 7.1.2'
}
我目前的解决方案是这样的,但我希望找到一种更简洁的方法:
[JsonConstructor]
public OsInfo(string name = null, string productname = null, string platform = null, string version = null)
{
if (name != null && productname != null)
{
throw new ArgumentException("Don't use both aliases for OS name");
}
this.Name = name != null ? name : productname;
【问题讨论】:
-
可以将
[JsonProperty("productName")]添加到构造函数参数name中,如this answer到Json.netJsonConstructorconstructor parameter names所示。 -
不,这行不通。如果这样做,我会将“名称”替换为有效的字段名称,而不是为其添加别名。并且不能在同一个字段中添加两个 JsonProperty 注解。
-
那么也许您可以多解释一下您要做什么。您是要重命名构造函数参数、重命名属性、将两个名称同时映射到构造函数参数,还是将两个名称同时映射到属性? minimal reproducible example 将大大有助于清除您的要求。
-
您需要显示实际的 JSON、实际代码、您期望的内容以及您得到的内容,包括堆栈跟踪的所有异常。
-
@JonathanAlfaro 没有异常,也没有堆栈跟踪。我要做的就是允许人们使用(不推荐使用的)键作为值(“产品名称”)作为正确值(“名称”)的别名。由于没有运行代码,因此也没有“我期望什么和我得到什么”。这不是修复错误的尝试。这是尝试以最简洁的方式添加功能。