NetDcSasDcSwithDCR サンプルでは、適切なDataContractSerializerでDataContractResolverを使用して、NetDataContractSerializerと同じ機能を提供する方法を示します。 このサンプルでは、適切な DataContractResolver を作成する方法と、 DataContractSerializerに追加する方法を示します。
サンプルの詳細
NetDataContractSerializer DataContractSerializerとは 1 つの重要な点で異なります。NetDataContractSerializerシリアル化された XML には CLR 型情報が含まれますが、DataContractSerializerには含まれません。 したがって、NetDataContractSerializer は、シリアル化とデシリアライズの両方の側が同じ CLR 型を共有する場合にのみ使用できます。 ただし、DataContractSerializerよりもパフォーマンスが優れているため、NetDataContractSerializerを使用することをお勧めします。 DataContractSerializerを追加することで、DataContractResolverでシリアル化される情報を変更できます。
このサンプルは、2 つのプロジェクトで構成されています。 最初のプロジェクトでは、 NetDataContractSerializer を使用してオブジェクトをシリアル化します。 2 番目のプロジェクトでは、 DataContractSerializer と DataContractResolver を使用して、最初のプロジェクトと同じ機能を提供します。
次のコード例は、DCSwithDCR プロジェクトのDataContractResolverに追加される MyDataContractResolver
という名前のカスタム DataContractSerializerの実装を示しています。
class MyDataContractResolver : DataContractResolver
{
private XmlDictionary dictionary = new XmlDictionary();
public MyDataContractResolver()
{
}
// Used at deserialization
// Allows users to map xsi:type name to any Type
public override Type ResolveName(string typeName, string typeNamespace, DataContractResolver knownTypeResolver)
{
Type type = knownTypeResolver.ResolveName(typeName, typeNamespace, null);
type ??= Type.GetType(typeName + ", " + typeNamespace);
return type;
}
// Used at serialization
// Maps any Type to a new xsi:type representation
public override void ResolveType(Type dataContractType, DataContractResolver knownTypeResolver, out XmlDictionaryString typeName, out XmlDictionaryString typeNamespace)
{
knownTypeResolver.ResolveType(dataContractType, null, out typeName, out typeNamespace);
if (typeName == null || typeNamespace == null)
{
XmlDictionary dictionary = new XmlDictionary();
typeName = dictionary.Add(dataContractType.FullName);
typeNamespace = dictionary.Add(dataContractType.Assembly.FullName);
}
}
}
このサンプルを使用するには
Visual Studio を使用して、DCRSample.sln ソリューション ファイルを開きます。
ソリューション ファイルを右クリックし、[プロパティ] を選択 します。
[ ソリューション プロパティ ページ ] ダイアログの [ 共通プロパティ] の [ スタートアップ プロジェクト] で、[ 複数のスタートアップ プロジェクト] を選択します。
DCSwithDCR プロジェクトの横にある [アクション] ドロップダウンから [開始] を選択します。
NetDCS プロジェクトの横にある [アクション] ドロップダウンから [開始] を選択します。
[ OK] を クリックしてダイアログを閉じます。
ソリューションをビルドするには、Ctrl++キーを押します。
ソリューションを実行するには、+ キーを押します。