【发布时间】:2022-01-04 09:51:02
【问题描述】:
我正在使用它来反序列化来自 Api 的 Json 响应。
var apiResponse = await GetAsync<MyResponseModel>(request);
在我的响应模型中,有一个 int 属性,但 api 出于某种原因将其格式化为浮点数。 所以它看起来像这样:
{
"Quantity": 6.000
}
现在我用这个技巧来解析它:
[JsonProperty("Quantity")]
private float QuantityFloat {
set => Quantity = IsInt(value) ? (int) value: throw new ArgumentException("Tried to parse number to Quantity that is not an int.");
}
public int Quantity { get; set; }
private static bool IsInt(float value)
{
var x = (int) value;
var temp2 = value - x;
return temp2 <= 0;
}
我的 linter 现在抱怨:“只有 setter 的属性令人困惑且违反直觉。相反,如果可能,应该添加属性 getter,或者应该用 setter 方法替换属性。” 所以我问自己是否有更好更优雅的方式来做到这一点。
【问题讨论】:
-
一些简单的事情(也许不是最好的,但我希望它至少没问题)是向属性
QuantityFloat添加一个getter,将setter 更改为仅采用浮点值(无转换),以删除Quantitysetter 并更改它的 getter 以使QuantityFloatvalue 转换 -
如果您知道自己在做什么,您可以指示 linter 忽略该属性。
-
为什么不能声明类型为十进制?我想我的问题是,这个属性是如何在你的应用程序中使用的,为什么它需要是一个整数?
-
那么物品的数量只能是整数。 Api 奇怪地给了我一个浮点数,虽然它从来没有小数。
标签: c# json api .net-core serialization