JsonSerializer 反序列化自定义 JSON

问题描述 投票:0回答:1

我有一个

json
文件,其格式如下:

{"0":{"Height":190,"Left":1640,"Top":170,"Width":600},"1":{"Height":52,"Left":2250,"Top":306,"Width":112},"10":{"Height":38,"Left":2011,"Top":794,"Width":378},"100":{"Height":45,"Left":192,"Top":3318,"Width":131},"101":{"Height":42,"Left":1211,"Top":3367,"Width":1216}}

json
文件中的特殊情况:

  • 条目未按升序排序(这对我来说不是问题)
  • 条目的编号为
    "1"
    "2"
    "3"
    ...,尤其是不像 json 列表那样正确命名。

我有一个类

Geometry
,如下所示:

public class Geometry
{
    public int Height { get; set; }
    public int Width { get; set; }
    public int Left { get; set; }
    public int Top { get; set; }
}

是否可以通过忽略“枚举”

json
"1"
"2"
等来解析
"3"
文件,并只考虑每个此类节点的内容(转换为类
Geometry
) )? 作为输出,我想要一个对象
List<Geometry>

我怎样才能实现这个目标?

.net json-deserialization jsonserializer
1个回答
0
投票

JSON 所代表的实际上是一个

Dictionary<string, Geometry>
- 或者,如果您对解析键感到满意,则可以是一个
Dictionary<int, Geometry>
。我建议将其解析为as,然后根据结果构建一个列表。如果您根本不关心密钥或顺序,我只需使用:

var list = JsonConvert.DeserializeObject<Dictionary<string, Geometry>>()
    .Values
    .ToList();

如果你想使用按键的value来排序,你可以这样写:

var list = JsonConvert.DeserializeObject<Dictionary<int, Geometry>>()
    .OrderBy(pair => pair.Key)
    .Values
    .ToList();
© www.soinside.com 2019 - 2024. All rights reserved.