Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / XsdDataContractImporter.cs / 1305376 / XsdDataContractImporter.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.Runtime.Serialization
{
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Diagnostics;
using System.ServiceModel.Diagnostics;
using System.Xml;
using System.Xml.Schema;
using System.Runtime.Serialization.Diagnostics;
public class XsdDataContractImporter
{
ImportOptions options;
CodeCompileUnit codeCompileUnit;
DataContractSet dataContractSet;
[Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - Static fields are marked SecurityCritical or readonly to prevent"
+ " data from being modified or leaked to other components in appdomain.")]
static readonly XmlQualifiedName[] emptyTypeNameArray = new XmlQualifiedName[0];
[Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - Static fields are marked SecurityCritical or readonly to prevent"
+ " data from being modified or leaked to other components in appdomain.")]
static readonly XmlSchemaElement[] emptyElementArray = new XmlSchemaElement[0];
XmlQualifiedName[] singleTypeNameArray;
XmlSchemaElement[] singleElementArray;
public XsdDataContractImporter()
{
}
public XsdDataContractImporter(CodeCompileUnit codeCompileUnit)
{
this.codeCompileUnit = codeCompileUnit;
}
public ImportOptions Options
{
get { return options; }
set { options = value; }
}
public CodeCompileUnit CodeCompileUnit
{
get
{
return GetCodeCompileUnit();
}
}
CodeCompileUnit GetCodeCompileUnit()
{
if (codeCompileUnit == null)
codeCompileUnit = new CodeCompileUnit();
return codeCompileUnit;
}
DataContractSet DataContractSet
{
get
{
if (dataContractSet == null)
{
dataContractSet = Options == null ? new DataContractSet(null, null, null) :
new DataContractSet(Options.DataContractSurrogate, Options.ReferencedTypes, Options.ReferencedCollectionTypes);
}
return dataContractSet;
}
}
public void Import(XmlSchemaSet schemas)
{
if (schemas == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas"));
InternalImport(schemas, null, null, null);
}
public void Import(XmlSchemaSet schemas, ICollection typeNames)
{
if (schemas == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas"));
if (typeNames == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeNames"));
InternalImport(schemas, typeNames, emptyElementArray, emptyTypeNameArray);
}
public void Import(XmlSchemaSet schemas, XmlQualifiedName typeName)
{
if (schemas == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas"));
if (typeName == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName"));
SingleTypeNameArray[0] = typeName;
InternalImport(schemas, SingleTypeNameArray, emptyElementArray, emptyTypeNameArray);
}
public XmlQualifiedName Import(XmlSchemaSet schemas, XmlSchemaElement element)
{
if (schemas == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas"));
if (element == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("element"));
SingleTypeNameArray[0] = null;
SingleElementArray[0] = element;
InternalImport(schemas, emptyTypeNameArray, SingleElementArray, SingleTypeNameArray/*filled on return*/);
return SingleTypeNameArray[0];
}
public bool CanImport(XmlSchemaSet schemas)
{
if (schemas == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas"));
return InternalCanImport(schemas, null, null, null);
}
public bool CanImport(XmlSchemaSet schemas, ICollection typeNames)
{
if (schemas == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas"));
if (typeNames == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeNames"));
return InternalCanImport(schemas, typeNames, emptyElementArray, emptyTypeNameArray);
}
public bool CanImport(XmlSchemaSet schemas, XmlQualifiedName typeName)
{
if (schemas == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas"));
if (typeName == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName"));
return InternalCanImport(schemas, new XmlQualifiedName[]{typeName}, emptyElementArray, emptyTypeNameArray);
}
public bool CanImport(XmlSchemaSet schemas, XmlSchemaElement element)
{
if (schemas == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("schemas"));
if (element == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("element"));
SingleTypeNameArray[0] = null;
SingleElementArray[0] = element;
return InternalCanImport(schemas, emptyTypeNameArray, SingleElementArray, SingleTypeNameArray);
}
public CodeTypeReference GetCodeTypeReference(XmlQualifiedName typeName)
{
DataContract dataContract = FindDataContract(typeName);
CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit());
return codeExporter.GetCodeTypeReference(dataContract);
}
public CodeTypeReference GetCodeTypeReference(XmlQualifiedName typeName, XmlSchemaElement element)
{
if (element == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("element"));
if (typeName == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName"));
DataContract dataContract = FindDataContract(typeName);
CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit());
#pragma warning suppress 56506 // Code Exporter will never be null
return codeExporter.GetElementTypeReference(dataContract, element.IsNillable);
}
internal DataContract FindDataContract(XmlQualifiedName typeName)
{
if (typeName == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName"));
DataContract dataContract = DataContract.GetBuiltInDataContract(typeName.Name, typeName.Namespace);
if (dataContract == null)
{
dataContract = DataContractSet[typeName];
if (dataContract == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.TypeHasNotBeenImported, typeName.Name, typeName.Namespace)));
}
return dataContract;
}
public ICollection GetKnownTypeReferences(XmlQualifiedName typeName)
{
if (typeName == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("typeName"));
DataContract dataContract = DataContract.GetBuiltInDataContract(typeName.Name, typeName.Namespace);
if (dataContract == null)
{
dataContract = DataContractSet[typeName];
if (dataContract == null)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.TypeHasNotBeenImported, typeName.Name, typeName.Namespace)));
}
CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit());
return codeExporter.GetKnownTypeReferences(dataContract);
}
XmlQualifiedName[] SingleTypeNameArray
{
get
{
if(singleTypeNameArray == null)
singleTypeNameArray = new XmlQualifiedName[1];
return singleTypeNameArray;
}
}
XmlSchemaElement[] SingleElementArray
{
get
{
if(singleElementArray == null)
singleElementArray = new XmlSchemaElement[1];
return singleElementArray;
}
}
void InternalImport(XmlSchemaSet schemas, ICollection typeNames, ICollection elements, XmlQualifiedName[] elementTypeNames/*filled on return*/)
{
if (DiagnosticUtility.ShouldTraceInformation)
{
TraceUtility.Trace(TraceEventType.Information, TraceCode.XsdImportBegin, SR.GetString(SR.TraceCodeXsdImportBegin));
}
DataContractSet oldValue = (dataContractSet == null) ? null : new DataContractSet(dataContractSet);
try
{
SchemaImporter schemaImporter = new SchemaImporter(schemas, typeNames, elements, elementTypeNames/*filled on return*/, DataContractSet, ImportXmlDataType);
schemaImporter.Import();
CodeExporter codeExporter = new CodeExporter(DataContractSet, Options, GetCodeCompileUnit());
codeExporter.Export();
}
catch (Exception ex)
{
if (Fx.IsFatal(ex))
{
throw;
}
dataContractSet = oldValue;
TraceImportError(ex);
throw;
}
if (DiagnosticUtility.ShouldTraceInformation)
{
TraceUtility.Trace(TraceEventType.Information, TraceCode.XsdImportEnd, SR.GetString(SR.TraceCodeXsdImportEnd));
}
}
bool ImportXmlDataType
{
get
{
return this.Options == null ? false : this.Options.ImportXmlType;
}
}
void TraceImportError(Exception exception)
{
if (DiagnosticUtility.ShouldTraceError)
{
TraceUtility.Trace(TraceEventType.Error, TraceCode.XsdImportError, SR.GetString(SR.TraceCodeXsdImportError), null, exception);
}
}
bool InternalCanImport(XmlSchemaSet schemas, ICollection typeNames, ICollection elements, XmlQualifiedName[] elementTypeNames)
{
DataContractSet oldValue = (dataContractSet == null) ? null : new DataContractSet(dataContractSet);
try
{
SchemaImporter schemaImporter = new SchemaImporter(schemas, typeNames, elements, elementTypeNames, DataContractSet, ImportXmlDataType);
schemaImporter.Import();
return true;
}
catch (InvalidDataContractException)
{
dataContractSet = oldValue;
return false;
}
catch (Exception ex)
{
if (Fx.IsFatal(ex))
{
throw;
}
dataContractSet = oldValue;
TraceImportError(ex);
throw;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Registry.cs
- TypeLibConverter.cs
- DPCustomTypeDescriptor.cs
- WebRequest.cs
- TimeZone.cs
- SafeTimerHandle.cs
- Vector3D.cs
- ZipIORawDataFileBlock.cs
- ObjectPersistData.cs
- ListViewGroup.cs
- RsaElement.cs
- BaseTemplateParser.cs
- HierarchicalDataBoundControlAdapter.cs
- PageParser.cs
- OracleBFile.cs
- ModelUIElement3D.cs
- String.cs
- EntityCommandExecutionException.cs
- RuleInfoComparer.cs
- BrushConverter.cs
- DecimalStorage.cs
- AuthenticationServiceManager.cs
- OpCodes.cs
- InputLangChangeRequestEvent.cs
- ClientSideProviderDescription.cs
- PointAnimationBase.cs
- FrameworkReadOnlyPropertyMetadata.cs
- WmfPlaceableFileHeader.cs
- TypeDependencyAttribute.cs
- TextEditorThreadLocalStore.cs
- Delay.cs
- TreeNodeStyle.cs
- NodeCounter.cs
- EdmPropertyAttribute.cs
- PropertyEmitterBase.cs
- ReadOnlyHierarchicalDataSource.cs
- BatchParser.cs
- DbConnectionPoolGroupProviderInfo.cs
- _Rfc2616CacheValidators.cs
- DomainConstraint.cs
- Pair.cs
- TrackingProfileDeserializationException.cs
- BitmapData.cs
- SqlCommandSet.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- ToolStripDropTargetManager.cs
- MsmqIntegrationProcessProtocolHandler.cs
- ByteStack.cs
- SafeProcessHandle.cs
- TdsValueSetter.cs
- Errors.cs
- ReaderWriterLockWrapper.cs
- VariableAction.cs
- WebPartEventArgs.cs
- PresentationAppDomainManager.cs
- InternalUserCancelledException.cs
- MissingFieldException.cs
- SqlError.cs
- InheritedPropertyDescriptor.cs
- SettingsAttributeDictionary.cs
- QueryTreeBuilder.cs
- MultiByteCodec.cs
- ResourceDescriptionAttribute.cs
- TableColumn.cs
- FlowDocumentPageViewerAutomationPeer.cs
- CompilerGlobalScopeAttribute.cs
- DiffuseMaterial.cs
- MembershipUser.cs
- ColorConverter.cs
- TextPointer.cs
- KeyValueConfigurationElement.cs
- TextAutomationPeer.cs
- SocketElement.cs
- OrCondition.cs
- TreeNodeBinding.cs
- MessageQueue.cs
- SqlDelegatedTransaction.cs
- EventLogLink.cs
- OperationInvokerTrace.cs
- BaseComponentEditor.cs
- RegexGroup.cs
- PackagePartCollection.cs
- TypeName.cs
- Label.cs
- ContractTypeNameCollection.cs
- TextStore.cs
- RegexRunner.cs
- ContextProperty.cs
- SolidBrush.cs
- StylusSystemGestureEventArgs.cs
- XamlRtfConverter.cs
- DetailsViewInsertedEventArgs.cs
- BreakRecordTable.cs
- MultiDataTrigger.cs
- RemotingService.cs
- DocumentDesigner.cs
- Lasso.cs
- StreamReader.cs
- DocumentPageTextView.cs
- SerialPinChanges.cs