【发布时间】: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