public override void ReadXml(XmlReader reader) { // Read tag attributes base.ReadXml(reader); UseForRetentionTimeFilter = reader.GetBoolAttribute(ATTR.use_for_retention_time_prediction, false); AnalyteConcentration = reader.GetNullableDoubleAttribute(ATTR.analyte_concentration); SampleType = SampleType.FromName(reader.GetAttribute(ATTR.sample_type)); // Consume tag reader.Read(); // Check if there is an optimization function element, and read // if if there is. IXmlElementHelper <OptimizableRegression> helper = reader.FindHelper(OPTIMIZATION_HELPERS); if (helper != null) { OptimizationFunction = helper.Deserialize(reader); } var chromFileInfos = new List <ChromFileInfo>(); var fileLoadIds = new List <string>(); while (reader.IsStartElement(EL.sample_file) || reader.IsStartElement(EL.replicate_file) || reader.IsStartElement(EL.chromatogram_file)) { // Note that the file path is actually be a URI that encodes things like lockmass correction as well as filename ChromFileInfo chromFileInfo = new ChromFileInfo(MsDataFileUri.Parse(reader.GetAttribute(ATTR.file_path))); chromFileInfo = chromFileInfo.ChangeHasMidasSpectra(reader.GetBoolAttribute(ATTR.has_midas_spectra, false)); chromFileInfos.Add(chromFileInfo); string id = reader.GetAttribute(ATTR.id) ?? GetOrdinalSaveId(fileLoadIds.Count); fileLoadIds.Add(id); reader.Read(); if (reader.IsStartElement(EL.instrument_info_list)) { reader.Skip(); reader.Read(); } } Annotations = SrmDocument.ReadAnnotations(reader); MSDataFileInfos = chromFileInfos; _fileLoadIds = fileLoadIds.ToArray(); // Consume end tag reader.ReadEndElement(); }
public override void WriteXml(XmlWriter writer) { // Write tag attributes base.WriteXml(writer); writer.WriteAttribute(ATTR.use_for_retention_time_prediction, false); writer.WriteAttributeNullable(ATTR.analyte_concentration, AnalyteConcentration); if (null != SampleType && !Equals(SampleType, SampleType.DEFAULT)) { writer.WriteAttribute(ATTR.sample_type, SampleType.Name); } // Write optimization element, if present if (OptimizationFunction != null) { IXmlElementHelper <OptimizableRegression> helper = XmlUtil.FindHelper( OptimizationFunction, OPTIMIZATION_HELPERS); if (helper == null) { throw new InvalidOperationException(Resources.ChromatogramSet_WriteXml_Attempt_to_serialize_list_containing_invalid_type); } writer.WriteElement(helper.ElementNames[0], OptimizationFunction); } int i = 0; foreach (var fileInfo in MSDataFileInfos) { writer.WriteStartElement(EL.sample_file); writer.WriteAttribute(ATTR.id, GetOrdinalSaveId(i++)); writer.WriteAttribute(ATTR.file_path, fileInfo.FilePath); writer.WriteAttribute(ATTR.sample_name, fileInfo.FilePath.GetSampleOrFileName()); if (fileInfo.RunStartTime != null) { writer.WriteAttribute(ATTR.acquired_time, XmlConvert.ToString((DateTime)fileInfo.RunStartTime, "yyyy-MM-ddTHH:mm:ss")); // Not L10N } if (fileInfo.FileWriteTime != null) { writer.WriteAttribute(ATTR.modified_time, XmlConvert.ToString((DateTime)fileInfo.FileWriteTime, "yyyy-MM-ddTHH:mm:ss")); // Not L10N } writer.WriteAttribute(ATTR.has_midas_spectra, fileInfo.HasMidasSpectra, false); // instrument information WriteInstrumentConfigList(writer, fileInfo.InstrumentInfoList); writer.WriteEndElement(); } SrmDocument.WriteAnnotations(writer, Annotations); }
public static void WriteElements <TItem>(this XmlWriter writer, IEnumerable <TItem> list, params IXmlElementHelper <TItem>[] helpers) where TItem : IXmlSerializable { foreach (TItem item in list) { if (Equals(item, default(TItem))) { throw new InvalidDataException(Resources.XmlUtil_WriteElements_Attempt_to_serialize_list_missing_an_element); } IXmlElementHelper <TItem> helper = FindHelper(item, helpers); if (helper == null) { throw new InvalidOperationException(string.Format(Resources.XmlUtil_WriteElements_Attempt_to_serialize_list_containing_invalid_type__0__, typeof(TItem))); } writer.WriteElement(helper.ElementNames[0], item); } }