我正在编写一些代码,将 C# 对象序列化为 JSON,通过网络发送并将 JSON 反序列化为 Python 对象。
反向操作也将完成,即将 Python 对象序列化为 JSON,通过网络发送并将 JSON 反序列化为 C# 对象。
在 C# 方面,我使用 ServiceStack JSON 库。在 Python 中,我使用的是内置的 json 库。如有必要,可以轻松更改 C# 库,而 Python 则要少得多。
// C# var serializer = new JsonSerializer(); var json = serializer.SerializeToString(request); // Python // JsonCodec 继承自 JSONEncoder 并挂钩到 'default' 并且只是 // 返回 obj.__dict__ 其中 obj 是要序列化的对象 actualSerializedResponse = JsonCodec().encode(response)
我用 C# 编写了一个单元测试来验证 ServiceStack 序列化的 JSON 是否符合 Python 端的预期。在测试中,创建了一个 Foo 实例,填充了一些硬编码值,然后序列化。为了确保有效性,我将序列化的 JSON 与保存在文件中的一些 JSON 进行比较,其中文件的内容代表 Python 端的期望。
同样,在 Python 中有一个单元测试来验证内置 json 库的序列化 JSON 是否符合 C# 端的预期。同样,为了确保有效性,我将实际的序列化 JSON 与保存在文件中的一些 JSON 进行比较。
在这两种情况下,我将序列化的 JSON 与保存在文件中的一些 JSON 进行比较这一事实意味着,每次运行测试时,将属性序列化为 JSON 的顺序必须保持一致。
我的问题:
在 C# 单元测试中,JSON 中属性的顺序似乎与在其实例被序列化的 C# 类中定义属性的顺序相匹配。这可以依靠吗?
在 Python 单元测试中,属性的顺序是一致的,但是是任意的。这是有道理的,因为它依赖于dict并且 Python 字典是无序的。但这可以每次/哪里都可靠吗?
有没有更好的方法来完成这一切?
提前谢谢了。