【问题标题】:Is JSON.Net guaranteed to always serialize the same way?JSON.Net 是否保证始终以相同的方式序列化?
【发布时间】:2014-12-02 08:54:12
【问题描述】:

我需要根据对象的状态生成一个“字符串”键。我想将对象序列化为 JSON 并将结果用作键。这仅适用于 JSON.Net 始终以相同方式序列化的情况。

如果遇到具有相同状态的同一类的对象,JSON.Net是否保证在同一台机器上以相同的方式序列化?

【问题讨论】:

  • 在我的测试中看起来一样...但这可能是巧合。我想确定,这就是我问社区的原因。希望有人知道 JSON.Net 框架是否确保了订单。
  • @Jamiec 测试保证是不可能的,并不简单。
  • @Jamiec,尤其是在涉及反射时,保证更难测试。我曾经使用过一个库(不是 Json.Net),它使用反射将类映射到平面文件,并且 99.9% 的时间,它可以正常工作,但是它会随机损坏文件,因为反射不能保证例如PropertyInfo 被返回,尽管库经历了一些非常复杂的黑客攻击来尝试弥补这一点(甚至使用反射 api 来修改反射 api 的私有成员!),但它并不总是成功地正确补偿。所以绝对值得一问。

标签: c# .net serialization json.net


【解决方案1】:

是的,否则单元测试会失败。

JsonPropertyAttribute 上有一个 Order 属性,如果你想显式声明订单。

【讨论】:

  • 太棒了!感谢詹姆斯的反应!
猜你喜欢
  • 1970-01-01
  • 2020-06-12
  • 2016-07-14
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2020-01-26
  • 2016-09-20
  • 1970-01-01
相关资源
最近更新 更多