JSON数组反序列化——元素的顺序总是保留吗?

4
在C#/.NET中反序列化JSON数组时,元素的顺序是否总是保留的?
编辑:当前使用的库是.NET 3.5的System.Runtime.Serialization.Json.DataContractJsonSerializer。

5
当你说“array”时,是指一个真正的数组(["foo", "bar", "baz"])还是一个对象({"foo": 1, "baz": 2})?任何一个合理的实现都会保留数组的顺序。我不会期望对象中键值对的顺序被保留(这也无所谓,因为RFC称对象是一个"无序集合"),但有些库可能会保留它们的顺序。 - Matthew Flaschen
1
@Matt:前者是一个数组,后者是一个对象。我怀疑你关于只有前者保留了它的顺序是正确的。 - Steven Sudit
@Steven/Matt:是的,JSON格式中的数组(例如["foo", "bar", "baz"]),而不是JS/JSON对象。我也相信顺序应该/会被保留,但我没有找到具体的文档说明。 - Jordan
@Jordan,如果你告诉我们你正在使用哪个库,我们可以搜集文档。但这是非常基础的东西,我会认为它已经被保留了,不必担心。 - Matthew Flaschen
@Matt:我正在使用.NET 3.5的System.Runtime.Serialization.Json.DataContractJsonSerializer。我认为,由于有序列表是JSON标准的一部分,任何明智的实现都会保留顺序,但最近有人对此提出了质疑,所以我想确认一下。 - Jordan
显示剩余6条评论
2个回答

3

是的。

JSON规范确实指定了数组的顺序被保留,因为它们是一个有序值集合:JSON.org


0
我认为这取决于你选择的库的实现。如果你的库文档没有提到这个问题,那么我会认为这是实现细节,不能被信任(在下一个版本中可能会改变)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接