C#-创建不带null属性的对象
我是C#新手,很难使用序列化json字符串创建类的对象。我使用一些成员变量定义了类,如下所示:C#-创建不带null属性的对象,c#,C#,我是C#新手,很难使用序列化json字符串创建类的对象。我使用一些成员变量定义了类,如下所示: class someClass{ someclass(serializedJson) { JavascriptSerializer js = new JavascriptSerializer(); var newObj = (someClass)(js.deserialize(serializedJson, typeof(serializedJson))); }
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”,因为该属性为null?您不能动态删除对象的属性,但可以使用getter为null值并返回所需的任何内容,例如:
get
{
return _price ?? string.Empty;
}
如果在反序列化对象中有Price字段的值,则必须创建
公共字符串Price{get;set;}
,并添加合适的属性,否则如果Price依赖于反序列化对象,则:
someclass(serializedJson)
{
JavascriptSerializer js = new JavascriptSerializer();
var newObj = (someClass)(js.deserialize(serializedJson, typeof(serializedJson)));
Price = // ... some code
}
pblic string Price { get; }
第一:价格不应该是字符串。无论如何,您不能删除对象的属性,但您可以用您知道它无效的方式来定义它,例如(仅举一个例子)
\u price=somePrice??"0"; 代码>。最后一个想法:序列化类时是否要删除属性?关于第二个问题,C#是静态类型的,因此您肯定无法从类中动态删除任何属性。如果数据为空值,则您不需要更新要替换的数据的值,也无法删除属性。您可以检查属性的空值,而不更新数据。为什么要使用字符串作为“price”,这显然是一个数字?改为使用可为空的浮点。@FalcoGer:对货币使用float
是一个非常糟糕的主意。能够精确地表示货币值通常很重要,这是十进制
的主要用例。(事实上,string
很可能被用来避免使用float
进行价格调整的问题……)