次の方法で共有


DataContractSerializer (XML) への移行

.NET の基本クラス ライブラリには、XmlSerializerDataContractSerializer という 2 つの XML シリアライザーが用意されています。 この 2 つの間にはわずかな違いがいくつかありますが、移行が目的であるこのセクションでは、DataContractSerializer のみに焦点を当てます。 なぜですか? BinaryFormatter で使用されていたserializationプログラミング モデルが完全にサポートされているためです。 既に [Serializable] としてマークされているか、ISerializable を実装している型はすべて DataContractSerializer でシリアル化できます。 要するにどういうことでしょうか? 既知の型を前もって指定しておく必要があるということです。 あなたはそれらを知っている必要があり、非公開の型であっても Type を取得できる必要があります。

stringDateTime などのよく使われるコレクションやプリミティブ型の指定をする必要はありませんが (シリアライザーには独自の許可リストがデフォルトで存在します)、DateTimeOffset のような例外もあります。 サポートされている型の詳細については、「データ コントラクト シリアライザーでサポートされる型」を参照してください。

部分信頼 は、.NET (Core) に移植されなかった .NET Framework の機能です。 .NET Framework で実行するコードでこの機能を使用している場合は、そのようなシナリオに適用される可能性のある制限事項を参照してください。

ステップ バイ ステップ移行

  1. BinaryFormatter が使用されているすべての箇所を見つけます。
  2. 変更を検証してバグの発生を回避できるように、serializationコード パスがテストでカバーされていることを確認します。
  3. DataContractSerializer は .NET Core ライブラリの一部であるため、パッケージをインストールする必要はありません。
  4. BinaryFormatter でシリアル化されているすべての型を見つけます。 型を変更する必要はありませんが、DataContractSerializer コンストラクターの引数 knownTypes を使用してリストにする必要がある場合があります。
  5. BinaryFormatter が使われている箇所を DataContractSerializer に置き換えます。
DataContractSerializer serializer = new(
    type: input.GetType(),
    knownTypes: new Type[]
    {
        typeof(MyType1),
        typeof(MyType2)
    });