【问题标题】:C# - Create object without null propertiesC# - 创建没有空属性的对象
【发布时间】: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#


【解决方案1】:

您不能动态删除对象的属性,但可以使用 getter 提供 null 值并返回您需要的任何值,例如:

get
{
    return _price ?? string.Empty;
}

【讨论】:

    【解决方案2】:

    如果反序列化对象中的 Price 字段具有值,则必须创建 public string 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; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 2017-09-02
      • 2019-07-10
      • 1970-01-01
      • 2010-10-26
      相关资源
      最近更新 更多