【发布时间】:2018-01-19 19:45:39
【问题描述】:
我正在尝试读取 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" }
Object 用于反序列化数据:
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" }
我目前知道如何解决它的唯一方法是创建一个新对象并使用它来序列化我的输出。不确定是否有更简单的方法来做到这一点。
【问题讨论】:
-
如示例中所见,Console.WriteLine(json);显示为“release_date”而不是“ReleaseDate”。我在这里想念什么?当我通过端点返回 json 时,也会发生同样的事情。
-
@dbc - 为问题添加了更多信息。
-
你看过这个吗?看起来与您需要的非常相似:stackoverflow.com/questions/44632448/…
-
如果您的名称映射是确定性的(驼峰式到蛇式),您可以在@VladStryapko 的链接答案Use different name for serializing and deserializing with Json.Net 中使用
JsonSerializerSettings中的自定义命名策略。如果名称映射不确定,请考虑使用来自JsonProperty WebApi request and response models 的ConditionalNameContractResolver。
标签: c# serialization json.net