ServiceStack での JSON シリアル化と型の保存
オブジェクトを JSON にシリアル化する場合、正しく逆シリアル化するために型情報を保持することが重要です。次の例を考えてみましょう:
<code>public class Container { public Animal Animal { get; set; } } public class Animal { } public class Dog : Animal { public void Speak() { Console.WriteLine("Woof!"); } }</code>
ここでは、Dog インスタンスを含む Container オブジェクトをシリアル化すると、逆シリアル化された Animal フィールドが Dog として明示的に認識されないため、逆シリアル化時に InvalidCastException が発生します。この問題を解決するために、ServiceStack は型情報を保存するメカニズムを採用しています。
ServiceStack の JsonSerializer には、型情報を保存するための JSON ペイロードに __type
属性が含まれています。このプロパティは、インターフェイス、抽象クラス、および遅延バインドされたオブジェクト型に対して生成されます。たとえば、Animal がインターフェイスまたは抽象クラスとして定義されている場合、シリアル化された JSON には、それぞれ値「Animal」または「Dog」を持つ __type
属性が含まれます。
DTO での継承の使用は、不必要な複雑さを招くため、一般的に推奨されないことに注意してください。 ServiceStack のデフォルトの JSON シリアル化プロセスは、外部型情報を必要とせずに自己記述型 DTO を生成するように設計されています。
以上がServiceStack は JSON のシリアル化および逆シリアル化中に型情報をどのように保持しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。