c# - 如何在单元测试中验证序列化的 JSON 在 Python/C# 中是否正确?

标签 c# python json serialization servicestack

我正在编写一些代码,将 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 inherits from JSONEncoder and hooks to 'default' and just 
// returns obj.__dict__ where obj is the object to be serialized
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 字典是无序的。但这可以随时随地依赖吗?

  • 有没有更好的方法来完成这一切?

非常感谢。

最佳答案

关于 Python 方面:您可以向 JSON 解码器传递一个选项以使用“有序字典”(但是需要 python 2.7):

来自 http://docs.python.org/library/json.html#json.load :

object_pairs_hook is an optional function that will be called with the result of any object literal decoded with an ordered list of pairs. The return value of object_pairs_hook will be used instead of the dict. This feature can be used to implement custom decoders that rely on the order that the key and value pairs are decoded (for example, collections.OrderedDict() will remember the order of insertion). If object_hook is also defined, the object_pairs_hook takes priority.

关于c# - 如何在单元测试中验证序列化的 JSON 在 Python/C# 中是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036971/

相关文章:

C# 声明同一个表的多个实例

c# - 将一个项目的输出复制到另一个项目的输出

c# - 在 ASP.NET Core 2.1 中添加自定义 TagHelpers

c# - ASP 身份 2.0 : Regenerate Identity

java - 在二维数组上查找第 K 个最小元素(或中值)的最快算法?

python - Pyspark:将CSV转换为嵌套JSON

javascript - 如何从html中的url获取json数据

python - 每天精确小时的值数组(5 天)

2 个文件的 Python difflib,行号不正确

java - 将 JSON 对象映射到通用 Map 对象