Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-创建不带null属性的对象_C# - Fatal编程技术网

C#-创建不带null属性的对象

C#-创建不带null属性的对象,c#,C#,我是C#新手,很难使用序列化json字符串创建类的对象。我使用一些成员变量定义了类,如下所示: class someClass{ someclass(serializedJson) { JavascriptSerializer js = new JavascriptSerializer(); var newObj = (someClass)(js.deserialize(serializedJson, typeof(serializedJson))); }

我是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”,因为该属性为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
进行价格调整的问题……)