using System; using System.IO; using System.Xml; using System.Xml.Serialization; using Microsoft.VisualStudio.TestTools.UnitTesting; using MT.pHLab.SE.V1; using SERemoteLib; namespace UnitTestProject { internal static class PhInstrumentSerializationHelper { /// /// Tries do deserialize the given xml data to the given type. /// /// /// An object of the given type if the data could be deserialized, null /// otherwise. /// public static T DeserializeDeviceData(this string xml) { object deviceData = null; try { using (TextReader reader = new StringReader(xml)) { XmlRootAttribute xmlRoot = new XmlRootAttribute(); xmlRoot.Namespace = "tf"; xmlRoot.IsNullable = true; var serializer = new XmlSerializer(typeof(T), xmlRoot); deviceData = serializer.Deserialize(reader); } } catch (XmlException ) { } catch (InvalidOperationException ) { } return (T)deviceData; } } [TestClass] public class UnitTestResultMessage { [TestMethod] public void Test01() { string telegram = "2016-02-03T12:29:08.46701"; StringReader stringReader = new StringReader(telegram); XmlTextReader reader = new XMLSerializationCustomization.PdkXmlTextReader(stringReader); { XmlRootAttribute xmlRoot = new XmlRootAttribute(); xmlRoot.Namespace = "tf"; xmlRoot.IsNullable = true; IntegerResult objResultMessage = new IntegerResult(); XmlSerializer xmlser = new XmlSerializer(objResultMessage.GetType(), xmlRoot); objResultMessage = (IntegerResult)xmlser.Deserialize(reader); } } [TestMethod] public void Test01StringResult() { string telegram = "2016-02-04T09:27:32.7300Hello world, here I am"; StringReader stringReader = new StringReader(telegram); XmlTextReader reader = new XMLSerializationCustomization.PdkXmlTextReader(stringReader); { StringResult objResultMessage = new StringResult(); XmlRootAttribute xmlRoot = new XmlRootAttribute(); xmlRoot.Namespace = "tf"; xmlRoot.IsNullable = true; XmlSerializer xmlser = new XmlSerializer(objResultMessage.GetType(), xmlRoot); objResultMessage = (StringResult)xmlser.Deserialize(reader); } } [TestMethod] public void Test01Decfloat() { //string telegram = "2016-02-04T09:27:32.7300eDecimalResultState_Valid1.034"; string telegram = "2016-02-04T09:27:32.730001.034"; StringReader stringReader = new StringReader(telegram); XmlTextReader reader = new XMLSerializationCustomization.PdkXmlTextReader(stringReader); { DecimalResult objResultMessage = new DecimalResult(); XmlRootAttribute xmlRoot = new XmlRootAttribute(); xmlRoot.Namespace = "tf"; xmlRoot.IsNullable = true; XmlSerializer xmlser = new XmlSerializer(objResultMessage.GetType(), xmlRoot); objResultMessage = (DecimalResult)xmlser.Deserialize(reader); } } [TestMethod] public void Test02_ResultMessage() { //string BAD telegram = "MeasType1:Measure100-235.023.43110.9910202016-02-04 14:56:54"; //string telegram = "MeasType1:Measure1002016-02-04T09:27:32.7300eDecimalResultState_Valid1.034"; // OK string telegram = "TIMESTAMPS002016-02-04T09:27:32.73001"; // OK string telegram = "ABTIMESTAMPS002016-02-03T12:29:08.46701"; // OK string telegram = "ABTIMESTAMPS002016-02-03T12:29:08.46701"; //string telegram = "ABTIMESTAMPS002016-02-03T12:29:08.46701"; string telegram = "HalloEchoMeasType1:Measure100174.524.5314.0410202016-02-05 17:54:07"; StringReader stringReader= new StringReader(telegram); XmlTextReader reader = new XMLSerializationCustomization.PdkXmlTextReader(stringReader); reader.ReadToFollowing("ResultMessage"); { ResultMessage objResultMessage = new ResultMessage(); //var resultMessage = PhInstrumentSerializationHelper.DeserializeDeviceData(telegram); XmlRootAttribute xmlRoot = new XmlRootAttribute(); xmlRoot.Namespace = "tf"; xmlRoot.IsNullable = true; XmlSerializer xmlser = new XmlSerializer(typeof(ResultMessage), xmlRoot); objResultMessage = (ResultMessage)xmlser.Deserialize(reader); } } [TestMethod] public void Test03() { string xmlstring; { StringWriter stream = new StringWriter(); ResultMessage message = new ResultMessage(); message.groupid = "GroupId"; message.rackid = "RackId"; message.slotid = "SlotId"; message.result = new TreasureFleetAnyResult(); message.result.Item = new DecimalResult(); ((DecimalResult)message.result.Item).value = 4712.4m; XmlSerializer serializer = new XmlSerializer(message.GetType()); serializer.Serialize(stream, message); xmlstring = stream.ToString(); } { StringReader xmlStream = new StringReader(xmlstring); ResultMessage message = new ResultMessage(); XmlRootAttribute xmlRoot = new XmlRootAttribute(); //xmlRoot.Namespace = "tf"; xmlRoot.ElementName = "Telegram"; xmlRoot.IsNullable = true; XmlSerializer xmlser = new XmlSerializer(message.GetType()); message = (ResultMessage)xmlser.Deserialize(xmlStream); } } [TestMethod] public void Test04() { string xmlstring; { StringWriter stream = new StringWriter(); ResultMessage message = new ResultMessage(); message.groupid = "GroupId"; message.rackid = "RackId"; message.slotid = "SlotId"; message.result = new TreasureFleetAnyResult(); message.result.Item = new DecimalResult(); ((DecimalResult)message.result.Item).value = 4712.4m; XmlRootAttribute xmlRoot = new XmlRootAttribute(); xmlRoot.Namespace = "tf"; xmlRoot.IsNullable = true; XmlSerializer serializer = new XmlSerializer(message.GetType(), xmlRoot); serializer.Serialize(stream, message); xmlstring = stream.ToString(); } { StringReader xmlStream = new StringReader(xmlstring); ResultMessage message = new ResultMessage(); XmlRootAttribute xmlRoot = new XmlRootAttribute(); xmlRoot.Namespace = "tf"; xmlRoot.IsNullable = true; XmlSerializer xmlser = new XmlSerializer(message.GetType(), xmlRoot); message = (ResultMessage)xmlser.Deserialize(xmlStream); } } [TestMethod] public void Test05_Response() { string telegram= "M001M002M003M004M005M006M007M008M009M010M011M012M013M014M015M016M017M018M019M020M021"; { XmlReader reader = XmlReader.Create(new StringReader(telegram)); MT.pHLab.SE.V1.SEResponse response = MT.pHLab.SE.V1.SEResponse.CreateFromXml(reader); if (response.GetRecordType() == typeof(MT.pHLab.SE.V1.Response_setupGetItemListRecord)) { var record = new MT.pHLab.SE.V1.Response_setupGetItemListRecord(); record.ReadXml(reader); } } } } }