【问题标题】:c# Parse JSON with no reference class? [duplicate]c#解析没有引用类的JSON? [复制]
【发布时间】:2020-03-26 20:08:15
【问题描述】:

我有一个类似于以下的 JSON:

{
    "type": "FeatureCollection",
    "totalFeatures": "unknown",
    "features": [
        {
            "type": "Feature",
            "id": "xxx",
            "geometry": {
                "type": "MultiPolygon",
                "coordinates": [
                    [
                        570389.865,
                        4722149.567
                    ],
                    [
                        570389.865,
                        4722149.567
                    ]
                ]
            }
        }
    ]
}

有没有办法在不使用 substring 或将其解析为代表该 JSON 的类的情况下获取第一个 featurecoordinates 属性?

我正在寻找将 JSON 字符串作为对象处理的标准方法,以及通过名称或类似名称获取子项的方法。

任何帮助将不胜感激

【问题讨论】:

  • 你可以使用JObject
  • 我认为不应用任何子字符串或解析是不可能的
  • @styx,JObject 需要解析才能使用有效负载。
  • @Nair 他说没有解析成代表类,根本没有解析
  • @styx,如果我没看错,“将其解析为代表该 JSON 的类”。 JObject.Parse 为给定的 json 表示/数据初始化 JObject 类的新实例。

标签: c# json parsing


【解决方案1】:

您可以使用Newtonsoft.Json 库。

以下是获取coordinates 字段的示例(使用 JSONPath):

var parsed = JObject.Parse(yourJson);

// returns JToken (but actually it's JArray, derived from JToken)
var coordArrayToken = parsed.SelectToken("$.features[0].geometry.coordinates");
var coordinates = coordArrayToken.ToObject<decimal[][]>();

当然你可以使用简单的索引器:

var parsed = JObject.Parse(yourJson);

// returns JToken (but actually it's JArray, derived from JToken)
var coordArrayToken = parsed["features"].Children().First()["geometry"]["coordinates"];
var coordinates = coordArrayToken.ToObject<decimal[][]>();

【讨论】:

    猜你喜欢
    • 2011-01-04
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多