【发布时间】:2019-12-10 15:30:26
【问题描述】:
我是 C# 新手,在使用序列化 json 字符串创建类的对象时遇到困难。我的类定义了一些成员变量,如下所示:
class someClass{
someclass(serializedJson) {
JavascriptSerializer js = new JavascriptSerializer();
var newObj = (someClass)(js.deserialize(serializedJson, typeof(serializedJson)));
}
// class has bunch of private and public member variables eg
private string this._value;
public string Price{
get {
return _price;
}
set {
_price = somePrice;
}
}
}
在其他文件中调用类来创建对象:
var obj = new someClass(serializedJsonString);
serializedJsonString 看起来像:
{
... : ...,
... : ...
// contains no key value pair for Price that I am trying to reference in constructor above. In other words, constructor should treat it as null.
}
显然,我的obj 是在obj.Price 为空的情况下创建的。
有没有办法:
1) 修改Price 的getter/setter 使其不具有obj 的属性,如果它不是来自serializedJson?
2) 从对象中删除属性“价格”,因为它为空?
【问题讨论】:
-
第一个:价格恕我直言不应该是一个字符串。无论如何,您不能删除对象的属性,但您可以以您知道它无效的方式定义它,例如(仅作为示例)
_price = somePrice ?? "0";。最后的想法:你想在序列化你的类时删除该属性吗? -
关于第二个问题,C# 是静态类型的,因此您当然不能从类中动态删除任何属性。
-
如果数据为空值,那么您不执行任何操作来更新您尝试替换的数据的值,您无法删除该属性。您可以检查属性是否为空值,而无需执行任何操作来更新数据。
-
为什么要使用字符串来表示“价格”,这显然是一个数字?改为使用可为空的浮点数。
-
@FalcoGer:将
float用于货币是一个非常糟糕的主意。能够精确地表示货币价值通常很重要——这是decimal的主要用例。 (事实上,很可能string被用来避免使用float来获取价格的问题......)
标签: c#