当我使用 json.net 库将 json 对象反序列化为 c# 对象时,数组属性中元素的顺序是否会保持不变?例如:
public class MySonsThreeFootRadius
{
public Boolean IsMessy { get; set; }
public Toy[] ToysThrownOnFloor { get; set; }
}
public class Toy
{
public String Name { get; set; }
}
{
"IsMessy": true,
"ToysThrownOnFloor": [
{ "Name": "Giraffe" },
{ "Name": "Ball" },
{ "Name": "Dad's phone" }
]
}
ToysThrownOnFloor 是否保留长颈鹿、鲍尔和爸爸手机的订单,或者是否可能重新订购?
这取决于您使用的集合。
任何类实现IEnumerable
/IEnumerable<T>
可以序列化为 JSON 数组。 Json.NET 按顺序处理集合,也就是说,它将按照集合返回数组项的顺序序列化数组项GetEnumerator
并将按照从 JSON 文件反序列化的顺序将项目添加到集合中(使用Add
方法(如果是可变集合),以及带有集合参数的构造函数(如果是不可变集合)。
这意味着如果集合保留项目的顺序 (T[]
, List<T>
, Collection<T>
, ReadOnlyCollection<T>
等),序列化和反序列化时将保留顺序。但是,如果集合不保留项目的顺序(HashSet<T>
等),订单将会丢失。
相同的逻辑适用于 JSON 对象。例如序列化时顺序会丢失Dictionary<TKey, TValue>
,因为该集合不保留项目的顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)