【发布时间】:2020-05-01 18:25:46
【问题描述】:
我有一个包含如下行的 JSON 文件:
{"id":"0258","name":"Canterbury","coordinates":[1.07992,51.27904]}
coordinates 项目是城市的地理坐标。但是它被存储为一个数组,该数组总是包含 [longitude, latitude]。
我想将这些条目反序列化为这样定义的 C# POCO 类:
public sealed class City
{
[JsonPropertyName("name")]
public string Name { get; set; }
[JsonPropertyName("coordinates")]
public GeographicLocation Location { get; set; }
}
public sealed class GeographicLocation
{
public GeographicLocation(double latitude, double longitude)
{
Latitude = latitude;
Longitude = longitude;
}
public double Latitude { get; private set; }
public double Longitude { get; private set; }
}
我想你可以看到我的目标。
有没有办法注释这些类,以便源 JSON 可以正确反序列化为我想要的对象图?
我目前正在使用System.Text.Json,但如果有更好的解决方案,我会立即切换到Newtonsoft.Json。
澄清
我知道如何将 JSON 反序列化为一个类,其中 JSON 元素和类属性之间存在对应关系。这里的基本问题是源 JSON 文件包含一个 2 元素数组,我想在我的反序列化类的属性中结束,而不是在单个数组属性中。我不知道如何做到这一点。
【问题讨论】:
-
@RufusL 不是真的,因为他们都没有解决我的问题。我知道如何反序列化为所有 JSON 属性都与类属性匹配的类,但我不知道如何将 JSON 数组反序列化为类的属性。
-
可以写自定义JsonConverter
-
如果没有简单的方法来做到这一点,我很想只使用编辑器对输入文件进行搜索和替换,这是一个永远不会发生的静态文件改变。
-
Newtonsoft 有一个 Custom JsonConverterr<T> 的想法,它允许您实现一个将该数组转换为新的
GeographicLocation实例的类。
标签: c# json deserialization json-deserialization system.text.json