private Type GetTargetType(XmlNode childNode, NetReflectorTypeTable table) { if ((attribute.InstanceTypeKey != null) && (childNode.Attributes != null) && (childNode.Attributes[attribute.InstanceTypeKey] != null)) { XmlAttribute instanceTypeAttribute = childNode.Attributes[attribute.InstanceTypeKey]; IXmlTypeSerialiser serialiser = table[instanceTypeAttribute.InnerText]; if (serialiser == null) { string msg = @"Type with NetReflector name ""{0}"" does not exist. The name may be incorrect or the assembly containing the type might not be loaded. Xml: {1}"; throw new NetReflectorException(string.Format(msg, instanceTypeAttribute.InnerText, childNode.OuterXml)); } /// HACK: no way of indicating that attribute is InstanceTypeKey. If this is removed then attribute will generate warning. childNode.Attributes.Remove(instanceTypeAttribute); return(serialiser.Type); } else if (attribute.InstanceType != null) { return(attribute.InstanceType); } else { return(member.MemberType); } }
private void GenerateSchemaElementForType(XmlSchema schema, IXmlTypeSerialiser serialiser) { XmlSchemaElement element = new XmlSchemaElement(); element.Name = serialiser.Attribute.Name; element.SchemaTypeName = new XmlQualifiedName(GenerateItemName(serialiser.Type), NamespaceUri); schema.Items.Add(element); }
public virtual void Write(XmlWriter writer, IXmlTypeSerialiser typeSerialiser) { writer.WriteStartElement("members"); foreach (IXmlMemberSerialiser memberSerialiser in typeSerialiser.MemberSerialisers) { writer.WriteStartElement("member"); writer.WriteElementString("name", memberSerialiser.ReflectorMember.Name); writer.WriteElementString("reflectorName", memberSerialiser.Attribute.Name); XmlDocumentationGenerator.WriteIfNotNull(writer, "description", memberSerialiser.Attribute.Description); writer.WriteElementString("required", memberSerialiser.Attribute.Required.ToString()); XmlDocumentationGenerator.WriteIfNotNull(writer, "instanceType", memberSerialiser.Attribute.InstanceType); XmlDocumentationGenerator.WriteIfNotNull(writer, "instanceTypeKey", memberSerialiser.Attribute.InstanceTypeKey); writer.WriteEndElement(); } writer.WriteEndElement(); }
private void FindBaseTypes(IXmlTypeSerialiser serialiser) { foreach (IXmlMemberSerialiser memberSerialiser in serialiser.MemberSerialisers) { var memberType = memberSerialiser.ReflectorMember.MemberType; if (memberType.IsArray) { memberType = memberType.GetElementType(); } if (!ReflectionUtil.IsCommonType(memberType)) { if (!baseTypes.Contains(memberType)) { baseTypes.Add(memberType); } } } }
private XmlSchemaParticle GenerateSchemaElementsForMembers(IXmlTypeSerialiser typeSerialiser) { XmlSchemaAll group = new XmlSchemaAll(); foreach (IXmlMemberSerialiser memberSerialiser in typeSerialiser.MemberSerialisers) { var item = new XmlSchemaElement { MaxOccurs = 1, MinOccurs = memberSerialiser.Attribute.Required ? 1 : 0 }; AddDocumentation(memberSerialiser.Attribute.Description, item); item.Name = memberSerialiser.Attribute.Name; GenerateElementType(memberSerialiser.ReflectorMember.MemberType, item, memberSerialiser.Attribute.HasCustomFactory); group.Items.Add(item); } return(group); }
private void GenerateComplexType(XmlSchema schema, IXmlTypeSerialiser serialiser) { XmlSchemaComplexType complexType = new XmlSchemaComplexType(); complexType.Name = GenerateItemName(serialiser.Type); var particle = GenerateSchemaElementsForMembers(serialiser); if (serialiser.Attribute.Extends != null) { var extension = new XmlSchemaComplexContentExtension { BaseTypeName = new XmlQualifiedName(GenerateItemName(serialiser.Attribute.Extends), NamespaceUri), Particle = particle }; complexType.ContentModel = new XmlSchemaComplexContent { Content = extension }; if (!baseTypes.Contains(serialiser.Attribute.Extends)) { baseTypes.Add(serialiser.Attribute.Extends); } } else { complexType.Particle = particle; } schema.Items.Add(complexType); if (baseTypes.Contains(serialiser.Type)) { baseTypes.Remove(serialiser.Type); } loadedTypes.Add(serialiser.Type, new ReferencedType { Extends = serialiser.Attribute.Extends, NamespaceUri = NamespaceUri, TypeName = complexType.Name, ElementName = serialiser.Attribute.Name, Description = serialiser.Attribute.Description }); }
private Type GetTargetType(XmlNode childNode, NetReflectorTypeTable table) { // Attempt to find the type XmlAttribute typeAttribute = null; if ((attribute.InstanceTypeKey != null) && (childNode.Attributes != null)) { typeAttribute = childNode.Attributes[attribute.InstanceTypeKey]; // This is a special case - the element may be an abstract element (see XSD) and needs the xsi namespace if ((typeAttribute == null) && (attribute.InstanceTypeKey == "type")) { typeAttribute = childNode.Attributes["type", "http://www.w3.org/2001/XMLSchema-instance"]; } } if ((attribute.InstanceTypeKey != null) && (childNode.Attributes != null) && (typeAttribute != null)) { IXmlTypeSerialiser serialiser = table[typeAttribute.InnerText]; if (serialiser == null) { string msg = @"Type with NetReflector name ""{0}"" does not exist. The name may be incorrect or the assembly containing the type might not be loaded. Xml: {1}"; throw new NetReflectorException(string.Format(msg, typeAttribute.InnerText, childNode.OuterXml)); } /// HACK: no way of indicating that attribute is InstanceTypeKey. If this is removed then attribute will generate warning. childNode.Attributes.Remove(typeAttribute); return(serialiser.Type); } else if (attribute.InstanceType != null) { return(attribute.InstanceType); } else { return(member.MemberType); } }
private void FindBaseTypes(IXmlTypeSerialiser serialiser) { foreach (IXmlMemberSerialiser memberSerialiser in serialiser.MemberSerialisers) { var memberType = memberSerialiser.ReflectorMember.MemberType; if (memberType.IsArray) memberType = memberType.GetElementType(); if (!ReflectionUtil.IsCommonType(memberType)) { if (!baseTypes.Contains(memberType)) baseTypes.Add(memberType); } } }
private XmlSchemaParticle GenerateSchemaElementsForMembers(IXmlTypeSerialiser typeSerialiser) { XmlSchemaAll group = new XmlSchemaAll(); foreach (IXmlMemberSerialiser memberSerialiser in typeSerialiser.MemberSerialisers) { var item = new XmlSchemaElement { MaxOccurs = 1, MinOccurs = memberSerialiser.Attribute.Required ? 1 : 0 }; AddDocumentation(memberSerialiser.Attribute.Description, item); item.Name = memberSerialiser.Attribute.Name; GenerateElementType(memberSerialiser.ReflectorMember.MemberType, item, memberSerialiser.Attribute.HasCustomFactory); group.Items.Add(item); } return group; }
private void GenerateComplexType(XmlSchema schema, IXmlTypeSerialiser serialiser) { XmlSchemaComplexType complexType = new XmlSchemaComplexType(); complexType.Name= GenerateItemName(serialiser.Type); var particle = GenerateSchemaElementsForMembers(serialiser); if (serialiser.Attribute.Extends != null) { var extension = new XmlSchemaComplexContentExtension { BaseTypeName = new XmlQualifiedName(GenerateItemName(serialiser.Attribute.Extends), NamespaceUri), Particle = particle }; complexType.ContentModel = new XmlSchemaComplexContent { Content = extension }; if (!baseTypes.Contains(serialiser.Attribute.Extends)) baseTypes.Add(serialiser.Attribute.Extends); } else { complexType.Particle = particle; } schema.Items.Add(complexType); if (baseTypes.Contains(serialiser.Type)) baseTypes.Remove(serialiser.Type); loadedTypes.Add(serialiser.Type, new ReferencedType { Extends = serialiser.Attribute.Extends, NamespaceUri = NamespaceUri, TypeName = complexType.Name, ElementName = serialiser.Attribute.Name, Description = serialiser.Attribute.Description }); }
public override void Write(XmlWriter writer, IXmlTypeSerialiser typeSerialiser) { // do nothing }