C# オブジェクトを JSON にシリアル化し、ネットワーク経由で送信し、JSON を Python オブジェクトに逆シリアル化するコードを書いています。
逆も行われます。つまり、Python オブジェクトを JSON にシリアル化し、それをネットワーク経由で送信し、JSON を C# オブジェクトに逆シリアル化します。
C# 側では、ServiceStack JSON ライブラリを使用します。Python では、組み込みの json ライブラリを使用しています。C# ライブラリは必要に応じて簡単に変更できますが、Python のライブラリはそれほど変更されません。
// C# var serializer = new JsonSerializer(); var json = serializer.SerializeToString(リクエスト); // パイソン // JsonCodec は JSONEncoder から継承し、'default' にフックして、 // obj.__dict__ を返します。ここで、obj はシリアル化されるオブジェクトです actualSerializedResponse = JsonCodec().encode(応答)
ServiceStack でシリアル化された JSON が Python 側で期待どおりであることを確認するために、C# で単体テストを作成しました。テストでは、Foo のインスタンスが作成され、ハードコードされた値が入力されてからシリアル化されます。妥当性を確認するために、シリアル化された JSON をファイルに保存された JSON と比較します。ファイルの内容は、Python 側が期待するものを表しています。
同様に、組み込みの json ライブラリのシリアル化された JSON が C# 側で期待どおりであることを確認するための Python の単体テストがあります。繰り返しになりますが、妥当性を確認するために、実際のシリアル化された JSON をファイルに保存された JSON と比較します。
どちらの場合も、シリアル化された JSON をファイルに保存された JSON と比較しているという事実は、プロパティが JSON にシリアル化される順序が、テストが実行されるたびに一貫している必要があることを意味します。
私の質問:
C# 単体テストでは、JSON 内のプロパティの順序は、インスタンスがシリアル化されている C# クラスでプロパティが定義された順序と一致しているようです。これは当てにできるでしょうか?
Python 単体テストでは、プロパティの順序は一貫していますが、任意です。これはdictに依存しており、Python 辞書は順不同であるため、理にかなっています。しかし、これはいつでもどこでも信頼できますか?
これをすべて行うより良い方法はありますか?
よろしくお願いします。