【问题标题】:Populating a property that is not a part of the JSON schema using JSON.Net使用 JSON.Net 填充不属于 JSON 模式的属性
【发布时间】:2019-03-01 18:54:51
【问题描述】:

我有一个如下所示的 JSON 对象:

{
    "Name": "John Smith"
    "Age": 18
    "Children" : [
        {
            "Name": "Little Johnny"
            "Age": 4
            "Children": []
        }
    ]
}

我的模型对象看起来像这样

public class Person {
    public string Name { get; set; }
    public int Age { get; set; }
    public IList<Person> Children { get; set; }
    public Guid? TrackingKey { get; set; }
}

如您所见,“TrackingKey”属性不是 JSON 的一部分。

我希望使用我在 JSON 反序列化时提供的值设置 TrackingKey 属性。

父级和所有子级的跟踪键都是相同的。

但是它不能是我在声明模型时可以使用 DefaultValue 属性传入的静态值。

将跟踪密钥分配给一组父母及其所有孩子的最佳方法是什么?

【问题讨论】:

  • 首先,为什么要定义tracking id?
  • 生成TrackingKey的逻辑是否涉及Person对象中数据以外的外部数据?
  • @Matt.G - 是的,跟踪密钥是外部的
  • 恐怕在反序列化期间没有直接设置 TrackingKey 的方法(除了使用 DefaultValue 属性的静态值)。你可以在反序列化后设置它
  • @Matt.G - 这也是我的后备计划。我想知道是否有任何委托或箭头函数等可用于“转换”反序列化后的对象。或者我将需要递归循环我的集合中的每个项目以添加我试图避免的跟踪键。

标签: c# json json.net json-deserialization


【解决方案1】:

您可以使用 GUID 生成您需要的值。

      string dados = Guid.NewGuid().ToString("N");

【讨论】:

  • 在这种情况下,我不希望生成新的 Guid。我已经有一个在其他地方生成的指南。我需要将它分配给我所有的反序列化对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 2016-02-29
  • 2014-03-01
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多