Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przykład NetDcSasDcSwithDCR pokazuje, jak użycie DataContractSerializer z odpowiednim DataContractResolver zapewnia taką samą funkcjonalność jak NetDataContractSerializer. W tym przykładzie pokazano, jak utworzyć odpowiednie DataContractResolver i jak dodać go do elementu DataContractSerializer.
Przykładowe szczegóły
NetDataContractSerializer różni się od DataContractSerializer pod jednym ważnym względem: NetDataContractSerializer zawiera informacje o typie CLR w serializowanym XML, natomiast DataContractSerializer nie. W związku z tym, NetDataContractSerializer można użyć tylko wtedy, gdy obie strony serializacji i deserializacji dzielą się tymi samymi typami CLR. Zaleca się jednak użycie DataContractSerializer go, ponieważ jego wydajność jest lepsza niż NetDataContractSerializer. Można zmienić informacje serializowane w DataContractSerializer, dodając do nich DataContractResolver.
Ten przykład składa się z dwóch projektów. Pierwszy projekt używa NetDataContractSerializer metody do serializacji obiektu. Drugi projekt używa DataContractSerializer wraz z DataContractResolver aby zapewnić taką samą funkcjonalność jak pierwszy projekt.
Poniższy przykład kodu przedstawia implementację niestandardowego elementu DataContractResolver jako nazwy MyDataContractResolver, który jest dodawany do DataContractSerializer w projekcie DCSwithDCR.
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);
}
}
}
Aby skorzystać z tego przykładu
Za pomocą programu Visual Studio otwórz plik rozwiązania DCRSample.sln.
Kliknij prawym przyciskiem myszy plik rozwiązania i wybierz polecenie Właściwości.
W oknie dialogowym Strony właściwości rozwiązania w obszarze Typowe właściwości, Projekt startowy wybierz pozycję Wiele projektów startowych:.
Obok projektu DCSwithDCR wybierz pozycję Rozpocznij z listy rozwijanej Akcja .
Obok projektu NetDCS wybierz pozycję Rozpocznij z listy rozwijanej Akcja .
Kliknij przycisk OK , aby zamknąć okno dialogowe.
Aby skompilować rozwiązanie, naciśnij Ctrl+Shift+B.
Aby uruchomić rozwiązanie, naciśnij Ctrl+F5.