public PropertyExtractorAnnotation Build(ISchemaAnnotationReader schemaAnnotationReader) { if (schemaAnnotationReader == null) { throw new ArgumentNullException(nameof(schemaAnnotationReader)); } Extractors = schemaAnnotationReader.GetAnnotationElement("Properties").IfNotNull( p => { var extractorCollection = new PropertyExtractorCollection(); extractorCollection.ReadXml(p.CreateReader()); return(extractorCollection); }) ?? PropertyExtractorCollection.Empty; return(this); }
public static ISchemaAnnotations Create(ISchemaMetadata metadata) { if (metadata == null) { throw new ArgumentNullException("metadata"); } if (metadata.Type.Assembly.FullName.StartsWith("Microsoft.", StringComparison.Ordinal)) { return(Empty); } var annotations = SelectAnnotations(metadata); if (!annotations.Any()) { return(Empty); } var envelopeMap = metadata.IsEnvelopeSchema ? annotations .SingleOrDefault(e => e.Name.LocalName == "EnvelopeMapSpecName") .IfNotNull(e => e.Value) .IfNotNull(n => Type.GetType(n, true)) : null; var extractors = annotations .SingleOrDefault(e => e.Name.LocalName == "Properties") .IfNotNull( p => { var extractorCollection = new PropertyExtractorCollection(); extractorCollection.ReadXml(p.CreateReader()); return(extractorCollection); }) ?? PropertyExtractorCollection.Empty; return(new SchemaAnnotations { EnvelopingMap = envelopeMap, Extractors = extractors }); }