Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере NetDcSasDcSwithDCR показано, как использование DataContractSerializer с соответствующим DataContractResolver обеспечивает ту же функциональность, что и NetDataContractSerializer. В этом примере показано, как создать соответствующий DataContractResolver объект и как добавить его в DataContractSerializer.
Пример сведений
NetDataContractSerializer отличается от DataContractSerializer одним важным образом: NetDataContractSerializer включает информацию о типе CLR в сериализованном XML, в то время как DataContractSerializer этого не делает. Поэтому NetDataContractSerializer можно использовать только в том случае, если оба участвующих в сериализации и десериализации конца используют одинаковые типы CLR. Однако рекомендуется использовать DataContractSerializer , так как его производительность лучше, чем NetDataContractSerializer. Вы можете изменить сведения, сериализованные в DataContractSerializer, добавив DataContractResolver к ним.
Этот пример состоит из двух проектов. Первый проект использует NetDataContractSerializer для сериализации объекта. Второй проект использует DataContractSerializer вместе с DataContractResolver, чтобы обеспечить ту же функциональность, что и первый проект.
В следующем примере кода показана реализация пользовательского DataContractResolver с именем MyDataContractResolver, который добавляется в DataContractSerializer проекта 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);
}
}
}
Использование этого примера
Откройте файл решения DCRSample.sln с помощью Visual Studio.
Щелкните правой кнопкой мыши файл решения и выберите "Свойства".
В диалоговом окне "Страницы свойств решения " в разделе "Общие свойства", " Запуск проекта" выберите несколько запускаемых проектов:.
Рядом с проектом DCSwithDCR выберите "Пуск " в раскрывающемся списке "Действие ".
Рядом с проектом NetDCS выберите "Пуск " в раскрывающемся списке "Действие ".
Нажмите кнопку ОК , чтобы закрыть диалоговое окно.
Чтобы создать решение, нажмите клавиши CTRL+SHIFT+B.
Чтобы запустить решение, нажмите клавиши CTRL+F5.