问题描述
在搜寻SO和Google的答案之后,我很茫然,所以希望有人可以帮助我!
我有一个使用第三方API数据的项目。数据是包含资产位置(经纬度)的JSON消息。
但是该API可以支持多边形和点(如下所示):
{
"geom": {
"coordinates": [
[
[
0.07666021585464479,51.49331798632394
],[
0.07707864046096803,51.49337476490021
],[
0.07717519998550416,51.49315433003204
],[
0.07676750421524049,51.49309087131179
],[
0.07666021585464479,51.49331798632394
]
]
],"type": "Polygon"
}
}
一个点看起来像这样:
{
"geom": {
"coordinates": [
-0.00203667,51.51020028
],"type": "Point"
}
}
我试图用以下方法模拟并反序列化:
public class Item
{
[JsonProperty("geom")]
public Geom Geom { get; set; }
}
public class Geom
{
[JsonProperty("coordinates")]
public double[] Coords { get; set; }
[JsonProperty("type")]
public string Type { get; set; }
}
并调用:
class Program
{
static void Main(string[] args)
{
new Program();
}
public Program()
{
var single = "{\"geom\":{\"coordinates\":[-0.00203667,51.51020028],\"type\":\"Point\"}}";
var s = JsonConvert.DeserializeObject<Item>(single);
var poly = "{\"geom\":{\"coordinates\":[[[0.07666021585464479,51.49331798632394],[0.07707864046096803,51.49337476490021],[0.07717519998550416,51.49315433003204],[0.07676750421524049,51.49309087131179],[0.07666021585464479,51.49331798632394]]],\"type\":\"Polygon\"}}";
var p = JsonConvert.DeserializeObject<Item>(poly);
}
}
我对问题很了解,多边形字符串必须为double[][]
。但是我似乎无法使两个字符串都使用相同的反序列化过程。
如果我将它们反序列化为object
,则可以使用它,但是如果不进行任何转换,则无法在具体类中使用它。
我也看到过一些尝试,将“点”反序列化包装在try / catch中,并使用catch对“ poly”进行反序列化,但这似乎很简单,API中可能还有其他类型的坐标系
我正在使用Newtonsoft.Json和我研究了所有不同的方法,我得到的最接近的方法是具有不同的类变量,但是由于这是较大资产类的子类,因此我不这样做''不想一直到顶层都创建变体。
我也研究了自定义反序列化,但是我对它的理解还不足以解决这个问题。
如果有人认为可以使用另一个库解决此问题,也很乐意更改序列化程序。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)