使用seters反序列化计算属性



假设我在 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,但不会反序列化。Bar.set() 似乎从未被调用过。知道为什么吗?我一直在浏览Newtonsoft文档以寻找线索,但还没有找到任何有用的东西。

根据评论,我想出了以下似乎有效的解决方案。

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;
    }
  }
}

相关内容

  • 没有找到相关文章

最新更新