gpt4 book ai didi

c# - 使用 json.net 反序列化时是否保留数组顺序?

转载 作者:可可西里 更新时间:2023-11-01 08:05:50 25 4
gpt4 key购买 nike

当我使用 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>时顺序会丢失,因为此集合不保留项目的顺序。

关于c# - 使用 json.net 反序列化时是否保留数组顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25954701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com