private XElement BuildComplexType(Type type, out string fileGroup) { var xsdComplexType = XsdComplexType.Get(type); //添加XSD文件 fileGroup = xsdComplexType.FileGroup; SetDefaultFile(fileGroup); //只有Request或者Response对象类型,末尾自动添加Type string name = (type.Name.EndsWith("Request") || type.Name.EndsWith("Response")) ? type.Name + "Type" : type.Name; var complexTypeElement = new XElement( _xs + "complexType", new XAttribute("name", name) ); if (!string.IsNullOrEmpty(xsdComplexType.Annotation)) { complexTypeElement.Add(new XElement( _xs + "annotation", new XElement(_xs + "documentation", xsdComplexType.Annotation) )); } var sequenceElement = BuildSequence(type); AddProperties(type, sequenceElement); complexTypeElement.Add(sequenceElement); return(complexTypeElement); }
private void AddProperties(Type type, XElement sequenceElement) { var properties = type.GetProperties(); foreach (var propertyInfo in properties) { var typeName = Common.GetXsdTypeName(propertyInfo.PropertyType); var propertyElement = new XElement( _xs + "element", new XAttribute("name", propertyInfo.Name), new XAttribute("type", typeName) ); var xsdElement = XsdElement.Get(propertyInfo); if (xsdElement != null) { if (!string.IsNullOrEmpty(xsdElement.MinOccurs)) { propertyElement.SetAttributeValue("minOccurs", xsdElement.MinOccurs); } if (!string.IsNullOrEmpty(xsdElement.MaxOccurs)) { propertyElement.SetAttributeValue("maxOccurs", xsdElement.MaxOccurs); } if (!string.IsNullOrEmpty(xsdElement.Annotation)) { propertyElement.Add(new XElement( _xs + "annotation", new XElement( _xs + "documentation", xsdElement.Annotation ) )); } } //判断是否自定义类型, 添加Import if (!typeName.StartsWith("xs:")) { var parentClassFileGroup = XsdComplexType.Get(type).FileGroup; var propertyClassFileGroup = Common.GetFileGroup(propertyInfo.PropertyType); if (parentClassFileGroup != propertyClassFileGroup) { string importXsd = propertyClassFileGroup + ".xsd"; //判断是否已经存在该Import if (_xsdFiles[parentClassFileGroup].Imports.All(item => item.Attribute("schemaLocation").Value != importXsd)) { _xsdFiles[parentClassFileGroup].Imports.Add( new XElement( _xs + "include", new XAttribute("schemaLocation", importXsd) ) ); } } } sequenceElement.Add(propertyElement); } }
public static string GetFileGroup(Type type) { type = GetPropertyType(type); if (type.IsClass) { return(XsdComplexType.Get(type).FileGroup); } if (type.IsEnum) { return(XsdSimpleType.Get(type).FileGroup); } return(null); }
private static ServiceDescription CreateNewServiceDescription() { var serviceDescription = new ServiceDescription(); serviceDescription.IdOwnerUser = 1; serviceDescription.ServiceName = "Test Service"; serviceDescription.RegistrationDateTime = DateTime.Now; serviceDescription.Xml = "test"; serviceDescription.XsdDocument = new XsdDocument { RegistrationDateTime = DateTime.Now, ServiceDescription = serviceDescription, XsdComplexTypes = new List <XsdComplexType>(), XsdSimpleTypes = new List <XsdSimpleType>() }; var complexType1 = new XsdComplexType { XsdComplexTypeName = "Complex Type 1", RegistrationDateTime = DateTime.Now }; var complexType2 = new XsdComplexType { XsdComplexTypeName = "Complex Type 2", RegistrationDateTime = DateTime.Now }; var complexType3 = new XsdComplexType { XsdComplexTypeName = "Complex Type 3", RegistrationDateTime = DateTime.Now }; var complexType4 = new XsdComplexType { XsdComplexTypeName = "Complex Type 4", RegistrationDateTime = DateTime.Now }; complexType1.ChildrenXsdComplexTypes = new List <XsdComplexType> { complexType2 }; //complexType2.ParentsXsdComplexType = new List<XsdComplexType> { complexType1 }; complexType2.ChildrenXsdComplexTypes = new List <XsdComplexType> { complexType3, complexType4 }; //complexType3.ParentsXsdComplexType = new List<XsdComplexType> { complexType2 }; //complexType4.ParentsXsdComplexType = new List<XsdComplexType> { complexType2 }; var simpleType1 = new XsdSimpleType { XsdSimpleTypeName = "Simple Type 1", RegistrationDateTime = DateTime.Now }; var simpleType2 = new XsdSimpleType { XsdSimpleTypeName = "Simple Type 2", RegistrationDateTime = DateTime.Now }; var simpleType3 = new XsdSimpleType { XsdSimpleTypeName = "Simple Type 3", RegistrationDateTime = DateTime.Now }; complexType2.XsdSimpleTypes = new List <XsdSimpleType> { simpleType1 }; complexType3.XsdSimpleTypes = new List <XsdSimpleType> { simpleType2 }; complexType4.XsdSimpleTypes = new List <XsdSimpleType> { simpleType3 }; serviceDescription.XsdDocument.XsdComplexTypes.Add(complexType1); serviceDescription.XsdDocument.XsdComplexTypes.Add(complexType2); serviceDescription.XsdDocument.XsdComplexTypes.Add(complexType3); serviceDescription.XsdDocument.XsdComplexTypes.Add(complexType4); var wsdlInterface = new WsdlInterface { WsdlInterfaceName = "Interface 1" }; serviceDescription.WsdlInterfaces = new List <WsdlInterface> { wsdlInterface }; return(serviceDescription); }