【问题标题】:Can we generate value for a property as a combination of other properties while deserializing a JSON in c#? [duplicate]我们可以在 c# 中反序列化 JSON 的同时为属性生成值作为其他属性的组合吗? [复制]
【发布时间】:2019-01-21 11:33:20
【问题描述】:

我有一个 Artifact 类,用于反序列化使用 JsonConvert.DeserializeObject() 处理的 JSON。

我要解决的问题是我需要将模型中的属性值设置为 JSON 中存在的其他两个属性的组合,该属性不是 JSON 的一部分。

public class Artefact : RealmObject
    {
        [PrimaryKey]
        public string Key { get; set; }
        [JsonProperty(PropertyName = "id")]
        public int ProductId { get; set; }
        [JsonProperty(PropertyName = "name")]
        public string Name { get; set; }
        [JsonProperty(PropertyName = "instructors")]
        public IList<Instructors> Instructors { get; }
        [JsonProperty(PropertyName = "startAt")]
        public string StartAt { get; set; }
        [JsonProperty(PropertyName = "endAt")]
        public string EndAt { get; set; }
        [JsonProperty(PropertyName = "actualStartAt")]
        public string ActualStartAt { get; set; }
        [JsonProperty(PropertyName = "actualEndAt")]
        public string ActualEndAt { get; set; }
        [JsonProperty(PropertyName = "status")]
        public string APIStatus { get; set; }
        [JsonProperty(PropertyName = "assignmentNumber")]
        public int AssignmentNumber { get; set; } = -1;
    }

List<Artefact> artefacts = JsonConvert.DeserializeObject<List<Artefact>>(data, _settings);

在反序列化作为 API 响应获得的 JSON 字符串“数据”时,我希望将 Key 的值设置为 ProductId.ToString() + AssignmentNumber.ToString()

【问题讨论】:

  • 它总是会是ProductId.ToString() + AssignmentNumber.ToString(),还是只是在从 json 反序列化时?另外,如果 productId 为 1,AssignmentNumber 为 5,则此表达式的结果是一个包含 15 的字符串。这是您真正想要的吗?
  • 好吧,这里的一个问题是Key 是一个int,但您试图将它设置为一个字符串。忽略这一点,您是否有理由不能只使用foreach (var artefact in artefacts) { artefact.Key = artefact.ProductId.ToString() + artefact.AssignmentNumber.ToString();}?也许不优雅,但可以完成工作。
  • @ZoharPeled 是的,这就是我想要的。对我们来说,分配编号和产品 ID 的组合始终是唯一的,而单独它们则不是。
  • ProductId 1 和 Assignment 11 与 ProductId 11 和 Assignment 1 相比怎么样?
  • @stuartd 是的,可以完成这项工作。但就像你指出的那样,正在寻找优雅的东西。

标签: c# json json-deserialization


【解决方案1】:

你可以像这样在你的类中添加一个属性:

    [JsonIgnore]
    public string MyProp { get { return this.ProductId.ToString() + this.AssignmentNumber.ToString(); } }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多