【问题标题】:How to accept multiple names for a single property on newtonsoft JSON de-serialization?如何在 newtonsoft JSON 反序列化中接受单个属性的多个名称?
【发布时间】:2015-06-16 09:28:19
【问题描述】:

我们定义了一个标准的json 格式(错字是故意的):

{
  "Name" : "John",
  "Salari" : "150000"
}

反序列化(使用 newtonsoft)为:

class Person
{
    public string Name;
    public string Salari;
}

有没有办法将Salari 更改为Salary 并且仍然能够接受旧名称的消息? 比如:

class Person
{
    public string Name;
    [DeserializeAlso("Salari")]
    public string Salary;
}

要让 newtonsoft 反序列化器了解 Salari 应该反序列化为 Salary 字段?

【问题讨论】:

  • string.Replace("\"Salari\",\"Salary\") 是不是不行了?
  • 签出this
  • @Nissim 我宁愿不这样做,因为这需要在很多地方跟踪它
  • @AndreiV 不会把“薪水”划掉而只保留“薪水”吗?
  • @AndreiV 我认为 shmoopy 想使用匿名对象。您引用的答案要求对象存在

标签: c# json json.net


【解决方案1】:

您可以使用属性:

class Person
{
  protected string _Salary;
  public string Salary
  {
    get { return _Salary; }
    set { _Salary = value; }
  }
  public string Name { get; set; } 
}

class BackwardCompatiblePerson : Person
{
  public string Salari 
  {
    get { return _Salary; }
    set { _Salary = value; }
  }
}

并使用Person 进行序列化和BackwardCompatiblePerson 进行反序列化。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多