/// <summary> /// Creates a <see cref="CodeAttributeDeclaration"/> for a <see cref="DataContractAttribute"/> /// </summary> /// <param name="sourceType">The type to which the attribute will be applied (to use as a reference)</param> /// <param name="codeGenerator">The client proxy generator</param> /// <param name="referencingType">The type referencing this declaration</param> /// <returns>The new attribute declaration</returns> internal static CodeAttributeDeclaration CreateDataContractAttributeDeclaration(Type sourceType, CodeDomClientCodeGenerator codeGenerator, CodeTypeDeclaration referencingType) { CodeAttributeDeclaration dataContractAttrib = CodeGenUtilities.CreateAttributeDeclaration(typeof(System.Runtime.Serialization.DataContractAttribute), codeGenerator, referencingType); string dataContractNamespace = CodeGenUtilities.GetContractNamespace(sourceType); string dataContractName = null; // If the user specified a DataContract, we should copy the namespace and name. DataContractAttribute sourceDataContractAttrib = (DataContractAttribute)Attribute.GetCustomAttribute(sourceType, typeof(DataContractAttribute)); if (sourceDataContractAttrib != null) { if (sourceDataContractAttrib.Namespace != null) { dataContractNamespace = sourceDataContractAttrib.Namespace; } if (sourceDataContractAttrib.Name != null) { dataContractName = sourceDataContractAttrib.Name; } } dataContractAttrib.Arguments.Add(new CodeAttributeArgument("Namespace", new CodePrimitiveExpression(dataContractNamespace))); if (dataContractName != null) { dataContractAttrib.Arguments.Add(new CodeAttributeArgument("Name", new CodePrimitiveExpression(dataContractName))); } return(dataContractAttrib); }