用设置器反序列化计算的属性

时间:2019-01-18 01:33:34

标签: c# .net json.net

假设我在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文档以寻找线索,但是还没有发现有用的东西。

1 个答案:

答案 0 :(得分:0)

根据评论,我提出了以下似乎可行的解决方案。

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