DataContractSerializer (XML) への移行
.NET の基本クラス ライブラリには、XmlSerializer と DataContractSerializer という 2 つの XML シリアライザーが用意されています。 この 2 つの間にはわずかな違いがいくつかありますが、移行が目的であるこのセクションでは、DataContractSerializer
のみに焦点を当てます。 なぜですか? BinaryFormatter
で使用されていたserializationプログラミング モデルが完全にサポートされているためです。 既に [Serializable]
としてマークされているか、ISerializable
を実装している型はすべて DataContractSerializer
でシリアル化できます。 要するにどういうことでしょうか? 既知の型を前もって指定しておく必要があるということです。 あなたはそれらを知っている必要があり、非公開の型であっても Type
を取得できる必要があります。
string
や DateTime
などのよく使われるコレクションやプリミティブ型の指定をする必要はありませんが (シリアライザーには独自の許可リストがデフォルトで存在します)、DateTimeOffset
のような例外もあります。 サポートされている型の詳細については、「データ コントラクト シリアライザーでサポートされる型」を参照してください。
部分信頼 は、.NET (Core) に移植されなかった .NET Framework の機能です。 .NET Framework で実行するコードでこの機能を使用している場合は、そのようなシナリオに適用される可能性のある制限事項を参照してください。
ステップ バイ ステップ移行
BinaryFormatter
が使用されているすべての箇所を見つけます。- 変更を検証してバグの発生を回避できるように、serializationコード パスがテストでカバーされていることを確認します。
DataContractSerializer
は .NET Core ライブラリの一部であるため、パッケージをインストールする必要はありません。BinaryFormatter
でシリアル化されているすべての型を見つけます。 型を変更する必要はありませんが、DataContractSerializer
コンストラクターの引数knownTypes
を使用してリストにする必要がある場合があります。BinaryFormatter
が使われている箇所をDataContractSerializer
に置き換えます。
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});
.NET