代码之家  ›  专栏  ›  技术社区  ›  Hiranya Jayathilaka

使用setter反序列化计算属性

  •  1
  • Hiranya Jayathilaka  · 技术社区  · 7 年前

    假设我有下面的C课。

    class MyClass
    {
      [JsonIgnore]
      public Foo Foo { get; set; }
    
      [JsonProperty("bar")]
      private Bar Bar
      {
        get
        {
          return new Bar()
          {
            Foo = this.Foo,
          }
        }
        set
        {
          this.Foo = value.Foo;
        }
      }
    }
    

    现在假设我创建以下实例:

    var instance = new MyClass()
    {
      Foo = new Foo(){//init properties of Foo};
    }
    

    它被正确地序列化为json,但没有被反序列化。这个吧台()似乎从未被调用过。知道为什么吗?我查阅了Newtonsoft的文档以寻找线索,但还没有发现任何有用的东西。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Hiranya Jayathilaka    7 年前

    基于这些评论,我想出了下面的解决方案,似乎很管用。

    class MyClass
    {
      private Bar _bar = new Bar();
    
      [JsonIgnore]
      public Foo Foo
      {
         get { return Bar.Foo; }
         set { Bar.Foo = value; }
      }
    
      [JsonProperty("bar")]
      private Bar Bar
      {
        get
        {
          // there's some validation logic that goes here
          return _bar;
        }
        set
        {
          _bar = value;
        }
      }
    }
    
    推荐文章