NetDataContractSerializer의 기능을 공급하기 위해 DataContractSerializer 및 DataContractResolver를 사용
NetDcSasDcSwithDCR 샘플에서는 적절한 DataContractResolver와 함께 DataContractSerializer를 사용하여 NetDataContractSerializer와 동일한 기능을 제공하는 방법을 보여 줍니다. 이를 위해 적절한 DataContractResolver를 만드는 방법과 이를 DataContractSerializer에 추가하는 방법을 보여 줍니다.
샘플 세부 정보
NetDataContractSerializer는 serialize된 XML에 CLR 형식 정보를 포함하지만 DataContractSerializer는 그렇지 않으며 이는 NetDataContractSerializer와 DataContractSerializer의 중요한 차이점 중 하나입니다. 따라서 직렬화하는 쪽과 역직렬화하는 쪽이 모두 동일한 CLR 형식을 공유하는 경우에만 NetDataContractSerializer를 사용할 수 있습니다. 그러나 DataContractSerializer는 NetDataContractSerializer보다 성능이 우수하므로 이를 사용하는 것이 좋습니다. DataContractSerializer에서는 DataContractResolver를 추가하여 serialize되는 정보를 변경할 수 있습니다.
이 샘플은 두 프로젝트로 구성되어 있습니다. 첫 번째 프로젝트에서는 NetDataContractSerializer를 사용하여 개체를 serialize합니다. 두 번째 프로젝트에서는 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 프로젝트 옆의 동작 드롭다운에서 시작을 선택합니다.
확인 을 클릭하여 대화 상자를 닫습니다.
솔루션을 빌드하려면 Ctrl+Shift+B를 누릅니다.
Ctrl+F5를 눌러 솔루션을 실행합니다.