public bool CanExport(Type type)
        {
            if (type == null)
            {
                throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(type)));
            }

            DataContractSet oldValue = (_dataContractSet == null) ? null : new DataContractSet(_dataContractSet);

            try
            {
                AddType(type);
                AddKnownTypes();
                return(true);
            }
            catch (InvalidDataContractException)
            {
                _dataContractSet = oldValue;
                return(false);
            }
            catch (Exception ex)
            {
                if (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
                _dataContractSet = oldValue;
                TraceExportError(ex);
                throw;
            }
        }
        public void Export(Type type)
        {
            if (type == null)
            {
                throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(type)));
            }

            TraceExportBegin();

            DataContractSet oldValue = (_dataContractSet == null) ? null : new DataContractSet(_dataContractSet);

            try
            {
                AddType(type);
                Export();
            }
            catch (Exception ex)
            {
                if (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
                _dataContractSet = oldValue;
                TraceExportError(ex);
                throw;
            }
            TraceExportEnd();
        }
Example #3
0
        private static bool IsTypeReferenceable(Type type)
        {
            Type itemType;

            try
            {
                TypeInfo typeInfo = type.GetTypeInfo();
                return(typeInfo.IsSerializable ||
                       typeInfo.IsAttributeDefined(Globals.TypeOfDataContractAttribute) ||
                       (Globals.TypeOfIXmlSerializable.IsAssignableFrom(type) && !typeInfo.IsGenericTypeDefinition) ||
                       CollectionDataContract.IsCollection(type, out itemType) ||
                       ClassDataContract.IsNonAttributedTypeValidForSerialization(type));
            }
            catch (Exception ex)
            {
                // An exception can be thrown in the designer when a project has a runtime binding redirection for a referenced assembly or a reference dependent assembly.
                // Type.IsDefined is known to throw System.IO.FileLoadException.
                // ClassDataContract.IsNonAttributedTypeValidForSerialization is known to throw System.IO.FileNotFoundException.
                // We guard against all non-critical exceptions.
                if (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
            }

            return(false);
        }
        private bool InternalCanImport(XmlSchemaSet schemas, ICollection <XmlQualifiedName> typeNames, ICollection <XmlSchemaElement> 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 (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
                _dataContractSet = oldValue;
                TraceImportError(ex);
                throw;
            }
        }
        public bool CanExport(ICollection <Assembly> assemblies)
        {
            if (assemblies == null)
            {
                throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(assemblies)));
            }

            DataContractSet oldValue = (_dataContractSet == null) ? null : new DataContractSet(_dataContractSet);

            try
            {
                foreach (Assembly assembly in assemblies)
                {
                    if (assembly == null)
                    {
                        throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.Format(SR.CannotExportNullAssembly, nameof(assemblies))));
                    }

                    Type[] types = assembly.GetTypes();
                    for (int j = 0; j < types.Length; j++)
                    {
                        CheckAndAddType(types[j]);
                    }
                }
                AddKnownTypes();
                return(true);
            }
            catch (InvalidDataContractException)
            {
                _dataContractSet = oldValue;
                return(false);
            }
            catch (Exception ex)
            {
                if (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
                _dataContractSet = oldValue;
                TraceExportError(ex);
                throw;
            }
        }
        private void InternalImport(XmlSchemaSet schemas, ICollection <XmlQualifiedName> typeNames, ICollection <XmlSchemaElement> elements, XmlQualifiedName[] elementTypeNames /*filled on return*/)
        {
            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 (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
                _dataContractSet = oldValue;
                TraceImportError(ex);
                throw;
            }
        }
        public void Export(ICollection <Type> types)
        {
            if (types == null)
            {
                throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(types)));
            }

            TraceExportBegin();

            DataContractSet oldValue = (_dataContractSet == null) ? null : new DataContractSet(_dataContractSet);

            try
            {
                foreach (Type type in types)
                {
                    if (type == null)
                    {
                        throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.Format(SR.CannotExportNullType, nameof(types))));
                    }
                    AddType(type);
                }

                Export();
            }
            catch (Exception ex)
            {
                if (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
                _dataContractSet = oldValue;
                TraceExportError(ex);
                throw;
            }
            TraceExportEnd();
        }
Example #8
0
        static DictionaryGlobals()
        {
            // Update array size when adding new strings or templates
            XmlDictionary dictionary = new XmlDictionary(61);

            try
            {
                // 0
                SchemaInstanceNamespace = dictionary.Add(Globals.SchemaInstanceNamespace);
                SerializationNamespace  = dictionary.Add(Globals.SerializationNamespace);
                SchemaNamespace         = dictionary.Add(Globals.SchemaNamespace);
                XsiTypeLocalName        = dictionary.Add(Globals.XsiTypeLocalName);
                XsiNilLocalName         = dictionary.Add(Globals.XsiNilLocalName);

                // 5
                IdLocalName        = dictionary.Add(Globals.IdLocalName);
                RefLocalName       = dictionary.Add(Globals.RefLocalName);
                ArraySizeLocalName = dictionary.Add(Globals.ArraySizeLocalName);
                EmptyString        = dictionary.Add(string.Empty);
                ISerializableFactoryTypeLocalName = dictionary.Add(Globals.ISerializableFactoryTypeLocalName);

                // 10
                XmlnsNamespace        = dictionary.Add(Globals.XmlnsNamespace);
                CharLocalName         = dictionary.Add("char");
                BooleanLocalName      = dictionary.Add("boolean");
                SignedByteLocalName   = dictionary.Add("byte");
                UnsignedByteLocalName = dictionary.Add("unsignedByte");

                // 15
                ShortLocalName         = dictionary.Add("short");
                UnsignedShortLocalName = dictionary.Add("unsignedShort");
                IntLocalName           = dictionary.Add("int");
                UnsignedIntLocalName   = dictionary.Add("unsignedInt");
                LongLocalName          = dictionary.Add("long");

                // 20
                UnsignedLongLocalName = dictionary.Add("unsignedLong");
                FloatLocalName        = dictionary.Add("float");
                DoubleLocalName       = dictionary.Add("double");
                DecimalLocalName      = dictionary.Add("decimal");
                DateTimeLocalName     = dictionary.Add("dateTime");

                // 25
                StringLocalName    = dictionary.Add("string");
                ByteArrayLocalName = dictionary.Add("base64Binary");
                ObjectLocalName    = dictionary.Add("anyType");
                TimeSpanLocalName  = dictionary.Add("duration");
                GuidLocalName      = dictionary.Add("guid");

                // 30
                UriLocalName         = dictionary.Add("anyURI");
                QNameLocalName       = dictionary.Add("QName");
                ClrTypeLocalName     = dictionary.Add(Globals.ClrTypeLocalName);
                ClrAssemblyLocalName = dictionary.Add(Globals.ClrAssemblyLocalName);
                Space = dictionary.Add(Globals.Space);

                // 35
                timeLocalName       = dictionary.Add("time");
                dateLocalName       = dictionary.Add("date");
                hexBinaryLocalName  = dictionary.Add("hexBinary");
                gYearMonthLocalName = dictionary.Add("gYearMonth");
                gYearLocalName      = dictionary.Add("gYear");

                // 40
                gMonthDayLocalName       = dictionary.Add("gMonthDay");
                gDayLocalName            = dictionary.Add("gDay");
                gMonthLocalName          = dictionary.Add("gMonth");
                integerLocalName         = dictionary.Add("integer");
                positiveIntegerLocalName = dictionary.Add("positiveInteger");

                // 45
                negativeIntegerLocalName    = dictionary.Add("negativeInteger");
                nonPositiveIntegerLocalName = dictionary.Add("nonPositiveInteger");
                nonNegativeIntegerLocalName = dictionary.Add("nonNegativeInteger");
                normalizedStringLocalName   = dictionary.Add("normalizedString");
                tokenLocalName = dictionary.Add("token");

                // 50
                languageLocalName = dictionary.Add("language");
                NameLocalName     = dictionary.Add("Name");
                NCNameLocalName   = dictionary.Add("NCName");
                XSDIDLocalName    = dictionary.Add("ID");
                IDREFLocalName    = dictionary.Add("IDREF");

                // 55
                IDREFSLocalName   = dictionary.Add("IDREFS");
                ENTITYLocalName   = dictionary.Add("ENTITY");
                ENTITIESLocalName = dictionary.Add("ENTITIES");
                NMTOKENLocalName  = dictionary.Add("NMTOKEN");
                NMTOKENSLocalName = dictionary.Add("NMTOKENS");

                // 60
                AsmxTypesNamespace = dictionary.Add("http://microsoft.com/wsdl/types/");

                // Add new templates here
            }
            catch (Exception ex)
            {
                if (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperFatal(ex.Message, ex);
            }
        }
        //Returns warnings
        public IList <string> GenerateCode(IList <Assembly> assemblies)
        {
            if (assemblies == null)
            {
                throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(assemblies)));
            }
            List <string> warnings = new List <string>();

            DataContractSet oldValue = (dataContractSet == null) ? null : new DataContractSet(dataContractSet);

            try
            {
                for (int i = 0; i < assemblies.Count; i++)
                {
                    Assembly assembly = assemblies[i];
                    if (assembly == null)
                    {
                        throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.Format(SR.CannotExportNullAssembly, "assemblies")));
                    }

                    Type[] types = assembly.GetTypes();
                    for (int j = 0; j < types.Length; j++)
                    {
                        try
                        {
                            CheckAndAddType(types[j]);
                        }
                        catch (Exception ex)
                        {
                            warnings.Add("Error on exporting Type " + DataContract.GetClrTypeFullName(types[j]) + ". " + ex.Message);
                        }
                    }
                }

                foreach (KeyValuePair <XmlQualifiedName, DataContract> pair in dataContractSet)
                {
                    DataContract dataContract = pair.Value;
                    if (dataContract is ClassDataContract)
                    {
                        try
                        {
                            XmlFormatClassWriterDelegate writerMethod = ((ClassDataContract)dataContract).XmlFormatWriterDelegate;
                            XmlFormatClassReaderDelegate readerMethod = ((ClassDataContract)dataContract).XmlFormatReaderDelegate;
                        }
                        catch (Exception ex)
                        {
                            warnings.Add("Error on exporting Type " + dataContract.UnderlyingType + ". " + ex.Message);
                        }
                    }
                    else if (dataContract is CollectionDataContract)
                    {
                        try
                        {
                            XmlFormatCollectionWriterDelegate writerMethod = ((CollectionDataContract)dataContract).XmlFormatWriterDelegate;
                            XmlFormatCollectionReaderDelegate readerMethod = ((CollectionDataContract)dataContract).XmlFormatReaderDelegate;
                        }
                        catch (Exception ex)
                        {
                            warnings.Add("Error on exporting Type " + dataContract.UnderlyingType + ". " + ex.Message);
                        }
                    }
                }
                return(warnings);
            }
            catch (Exception ex)
            {
                if (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
                dataContractSet = oldValue;
                TraceExportError(ex);
                throw;
            }
        }
Example #10
0
        static DictionaryGlobals()
        {
            // Update array size when adding new strings or templates
            XmlDictionary dictionary = new XmlDictionary(61);

            try
            {
                // 0
                SchemaInstanceNamespace = dictionary.Add(Globals.SchemaInstanceNamespace);
                SerializationNamespace  = dictionary.Add(Globals.SerializationNamespace);
                SchemaNamespace         = dictionary.Add(Globals.SchemaNamespace);
                XsiTypeLocalName        = dictionary.Add(Globals.XsiTypeLocalName);
                XsiNilLocalName         = dictionary.Add(Globals.XsiNilLocalName);

                // 5
                IdLocalName        = dictionary.Add(Globals.IdLocalName);
                RefLocalName       = dictionary.Add(Globals.RefLocalName);
                ArraySizeLocalName = dictionary.Add(Globals.ArraySizeLocalName);
                EmptyString        = dictionary.Add(String.Empty);
                // 10
                XmlnsNamespace        = dictionary.Add(Globals.XmlnsNamespace);
                CharLocalName         = dictionary.Add("char");
                BooleanLocalName      = dictionary.Add("boolean");
                SignedByteLocalName   = dictionary.Add("byte");
                UnsignedByteLocalName = dictionary.Add("unsignedByte");

                // 15
                ShortLocalName         = dictionary.Add("short");
                UnsignedShortLocalName = dictionary.Add("unsignedShort");
                IntLocalName           = dictionary.Add("int");
                UnsignedIntLocalName   = dictionary.Add("unsignedInt");
                LongLocalName          = dictionary.Add("long");

                // 20
                UnsignedLongLocalName = dictionary.Add("unsignedLong");
                FloatLocalName        = dictionary.Add("float");
                DoubleLocalName       = dictionary.Add("double");
                DecimalLocalName      = dictionary.Add("decimal");
                DateTimeLocalName     = dictionary.Add("dateTime");

                // 25
                StringLocalName    = dictionary.Add("string");
                ByteArrayLocalName = dictionary.Add("base64Binary");
                ObjectLocalName    = dictionary.Add("anyType");
                TimeSpanLocalName  = dictionary.Add("duration");
                GuidLocalName      = dictionary.Add("guid");

                // 30
                UriLocalName         = dictionary.Add("anyURI");
                QNameLocalName       = dictionary.Add("QName");
                ClrTypeLocalName     = dictionary.Add(Globals.ClrTypeLocalName);
                ClrAssemblyLocalName = dictionary.Add(Globals.ClrAssemblyLocalName);
                Space = dictionary.Add(Globals.Space);

                hexBinaryLocalName = dictionary.Add("hexBinary");
                // Add new templates here
            }
            catch (Exception ex)
            {
                if (DiagnosticUtility.IsFatal(ex))
                {
                    throw;
                }
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperFatal(ex.Message, ex);
            }
        }