SERemoteControl/SEClient/ResultMessageSerializer.cs
longfellowJian 76792ef9ad 初始化
2025-03-27 16:06:44 +08:00

308 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
using MT.pHLab.SE.V1;
using XMLSerializationCustomization;
namespace SERemoteLib
{
public class SEResultMessageSerializer
{
public static string Serialize(ResultMessage objResultMessage)
{
XmlSerializer xmlSerializer = new XmlSerializer(objResultMessage.GetType());
StringWriter xmlStream = new StringWriter();
xmlSerializer.Serialize(xmlStream, objResultMessage);
return xmlStream.ToString();
}
public static ResultMessage Deserialize(string xmlResultMessage)
{
StringReader stringReader = new StringReader(xmlResultMessage);
XmlTextReader reader = new XMLSerializationCustomization.PdkXmlTextReader(stringReader);
ResultMessage objResultMessage = new ResultMessage();
XmlRootAttribute xmlRoot = new XmlRootAttribute();
xmlRoot.Namespace = "tf";
//xmlRoot.ElementName = "";
xmlRoot.IsNullable = true;
XmlSerializer xmlser = new XmlSerializer(objResultMessage.GetType(), xmlRoot);
return (ResultMessage)xmlser.Deserialize(reader);
}
public static string SerializeString(ResultMessage rm)
{
string sResultMessage = "";
string sResult = "";
string sResultType = "";
string sResultUnit = "";
try
{
Object Result = rm.result.Item;
Type ResultType = Result.GetType();
string[] a = ResultType.ToString().Split('.');
sResultType = a[a.Length - 1];
if (ResultType == typeof(DecimalResult))
{
sResult = SerializeDecimalResult((DecimalResult)Result);
}
else if (ResultType == typeof(IntegerResult))
{
sResult = ((IntegerResult)Result).value.ToString();
}
else if (ResultType == typeof(StringResult))
{
sResult = ((StringResult)Result).value;
}
else if (ResultType == typeof(ResultPh))
{
return GetText((ResultPh)Result);
}
else if (ResultType == typeof(ResultCnd))
{
return GetText((ResultCnd)Result);
}
//else if (ResultType == typeof(ErrorResult))
//{
// sResult = SerializeErrorResult((ErrorResult)Result);
//}
else
{
sResult = string.Format("??? type: {0}", sResultType);
}
}
catch (Exception)
{
sResult = "ERROR";
}
//get result unit
sResultUnit = rm.unitstring;
if (String.IsNullOrEmpty(sResultUnit))
{
sResultUnit = ((ECommonUnit)rm.unit).ToString();
}
sResultMessage = string.Format("{0}.{1}.{2} ({3}) -> {4} [{5}] (Prec: {6})"
, rm.rackid
, rm.slotid
, rm.groupid
, sResultType
, sResult
, sResultUnit
, rm.precision
);
return sResultMessage;
}
private static string SerializeDecimalResult(DecimalResult r)
{
switch (r.state)
{
case EDecimalResultState.eDecimalResultState_Valid:
return r.value.ToString();
case EDecimalResultState.eDecimalResultState_NaN:
return "NaN";
case EDecimalResultState.eDecimalResultState_INF:
return "INF";
default:
throw new ArgumentOutOfRangeException("r.state");
}
}
static public string GetText(EAnalysisStatus enumAnalysisStatus)
{
switch (enumAnalysisStatus)
{
case EAnalysisStatus.eAnalysisStatusid_AnalysisStatus_OK:
return "OK";
case EAnalysisStatus.eAnalysisStatusid_AnalysisStatus_OKStar:
return "OK*";
case EAnalysisStatus.eAnalysisStatusid_AnalysisStatus_Failed:
return "Failed";
case EAnalysisStatus.eAnalysisStatusid_AnalysisStatus_Error:
return "Error";
case EAnalysisStatus.eAnalysisStatusid_AnalysisStatus_CriticalError:
return "Critical Error";
case EAnalysisStatus.eAnalysisStatusid_AnalysisStatus_Terminate:
return "Terminate";
default:
return string.Empty;
}
}
static public string GetText(EResultLimitState enumResultLimitState)
{
switch (enumResultLimitState)
{
case EResultLimitState.eResultLimit_NotChecked:
return "Not Checked";
case EResultLimitState.eResultLimit_InRange:
return "In Range";
case EResultLimitState.eResultLimit_OutUpper:
return "Error (above high limit)";
case EResultLimitState.eResultLimit_OutLower:
return "Error (below low limit)";
case EResultLimitState.eResultLimit_min:
return "Minimum";
case EResultLimitState.eResultLimit_max:
return "Maximum";
default:
return string.Empty;
}
}
static public string GetText(ECommonUnit eCommonUnit)
{
switch (eCommonUnit)
{
case ECommonUnit.eCommonUnitid_CommonUnit_None:
return string.Empty;
case ECommonUnit.eCommonUnitid_CommonUnit_PSU:
return "psu";
case ECommonUnit.eCommonUnitid_CommonUnit_PPT:
return "ppt";
case ECommonUnit.eCommonUnitid_CommonUnit_MMOLL:
return "mmol/L";
case ECommonUnit.eCommonUnitid_CommonUnit_MOLL:
return "mol/L";
case ECommonUnit.eCommonUnitid_CommonUnit_TDSPPT:
return "ppt(‰)";
case ECommonUnit.eCommonUnitid_CommonUnit_MgL:
return "mg/L";
case ECommonUnit.eCommonUnitid_CommonUnit_PPM:
return "ppm";
case ECommonUnit.eCommonUnitid_CommonUnit_Percent:
return "%";
case ECommonUnit.eCommonUnitid_CommonUnit_PX:
return "pX";
case ECommonUnit.eCommonUnitid_CommonUnit_PH:
return "pH";
case ECommonUnit.eCommonUnitid_CommonUnit_MV:
return "mV";
case ECommonUnit.eCommonUnitid_CommonUnit_RelMV:
return "Rel.mV";
case ECommonUnit.eCommonUnitid_CommonUnit_USCM:
return "µS/cm";
case ECommonUnit.eCommonUnitid_CommonUnit_MSCM:
return "mS/cm";
case ECommonUnit.eCommonUnitid_CommonUnit_SPerM:
return "S/m";
case ECommonUnit.eCommonUnitid_CommonUnit_USPerM:
return "µS/m";
case ECommonUnit.eCommonUnitid_CommonUnit_MSPerM:
return "mS/m";
case ECommonUnit.eCommonUnitid_CommonUnit_GPerL:
return "g/L";
case ECommonUnit.eCommonUnitid_CommonUnit_mBar:
return "mbar";
case ECommonUnit.eCommonUnitid_CommonUnit_hPa:
return "hPa";
case ECommonUnit.eCommonUnitid_CommonUnit_mmHg:
return "mmHg";
case ECommonUnit.eCommonUnitid_CommonUnit_Atm:
return "Atm";
case ECommonUnit.eCommonUnitid_CommonUnit_KOCM:
return "KΩ.cm";
case ECommonUnit.eCommonUnitid_CommonUnit_MOCM:
return "MΩ.cm";
case ECommonUnit.eCommonUnitid_CommonUnit_OCM:
return "Ω.cm";
case ECommonUnit.eCommonUnitid_CommonUnit_GPerMOL:
return "g/Mol";
case ECommonUnit.eCommonUnitid_CommonUnit_CellConstant:
return "CC";
case ECommonUnit.eCommonUnitid_CommonUnit_MVPerPH:
return "mV/pH";
case ECommonUnit.eCommonUnitid_CommonUnit_MVPerPX:
return "mV/pX";
case ECommonUnit.eCommonUnitid_CommonUnit_ML:
return "mL";
case ECommonUnit.eCommonUnitid_CommonUnit_Celsius:
return "°C";
case ECommonUnit.eCommonUnitid_CommonUnit_Fahrenheit:
return "°F";
case ECommonUnit.eCommonUnitid_CommonUnit_Ohm:
return "Ω";
case ECommonUnit.eCommonUnitid_CommonUnit_Seconds:
return "s";
case ECommonUnit.eCommonUnitid_CommonUnit_V:
return "V";
case ECommonUnit.eCommonUnitid_CommonUnit_PercentPerCenti:
return "%";
case ECommonUnit.eCommonUnitid_CommonUnit_KOhm:
return "K.Ω";
case ECommonUnit.eCommonUnitid_CommonUnit_MOhm:
return "M.Ω";
default:
return string.Empty;
}
}
static public string GetText(EResultQuality enumResultQuality)
{
switch (enumResultQuality)
{
case EResultQuality.eDraftValue:
return "Draft";
case EResultQuality.eDraftValue_Stable:
return "Draft/Stable";
case EResultQuality.eManualEndpoint:
return "Manualendpoint";
case EResultQuality.eAutoEndpoint_Strict:
return "Automatic/Strict";
case EResultQuality.eAutoEndpoint_Normal:
return "Automatic/Normal";
case EResultQuality.eAutoEndpoint_Fast:
return "Automatic/Standard";
case EResultQuality.eAutoEndpoint_UserDef:
return "Automatic/User defined";
case EResultQuality.eTimedEndpoint:
return "Timed";
default:
return "Unspecified";
}
}
static public string GetText(ResultCnd result)
{
string output = string.Format("Cnd: {0}{1}, {2}{3} ({4} {5})",
result.resultValue.Value,
GetText(result.resultUnit),
result.rawTemperature.Value,
GetText(result.temperatureUnit),
GetText(result.resultQuality),
GetText(result.resultLimitState));
return output;
}
static public string GetText(ResultPh result)
{
string output = string.Format("Ph: {0}{1}, {2}{3} ({4} {5})",
result.resultValue.Value,
GetText(result.resultUnit),
result.rawTemperature.Value,
GetText(result.temperatureUnit),
GetText(result.resultQuality),
GetText(result.resultLimitState));
return output;
}
}
}