我正在尝试读取 JSON 文件,重命名属性名称,并使用新名称导出新的 JSON。如本例所述,https://www.newtonsoft.com/json/help/html/JsonPropertyName.htm,我们可以使用 JsonProperty 在代码内部指定不同的名称。但是,当您导出 json 时,它会返回原始名称。因此,在示例中,当它记录在控制台中时,它仍然返回“release_date”而不是“ReleaseDate”。有没有办法在不创建全新对象的情况下做到这一点?
为了澄清事情,这是我正在尝试做的事情的示例:
JSON 输入:
{ "name": "Starcraft", "release_date": "1998-01-01T00:00:00" }
用于反序列化数据的对象:
public class Videogame
{
public string name{ get; set; }
[JsonProperty("release_date")]
public DateTime releaseDate { get; set; }
}
称为的代码:
var json = JsonConvert.DeserializeObject<Videogame>(File.ReadAllText(path))
Console.WriteLine(JsonConvert.SerializeObject(json));
结果输出:
{ "name": "Starcraft", "release_date": "1998-01-01T00:00:00" }
期望的输出:
{ "name": "Starcraft", "releaseDate": "1998-01-01T00:00:00" }
我目前知道如何解决这个问题的唯一方法是创建一个新对象并使用它来序列化我的输出。不确定是否有更简单的方法可以做到这一点。
以下将起作用:
public class Videogame
{
public string name{ get; set; }
[JsonProperty("release_date")]
public DateTime old
{
set { ReleaseDate = value; }
}
[JsonProperty("releaseDate")]
public DateTime ReleaseDate { get; set; }
}
反序列化时,旧属性会将其值重定向到新属性。
由于旧属性只是一个 setter,因此不会被序列化回来。
我不会考虑使用这种方法进行大量重命名。那么最好遵循评论中给出的建议。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)