StringConverter
StringConverter.TryGet(fromType, toType, out writer) gets string converter.
bool ok = StringConverter.TryGet(typeof(Guid), typeof(string), out IWriter converter);
string value = converter.ReadAs<Guid, string>( Guid.NewGuid() );
StringConverter.Printer<T>() returns string printer. If T implements IFormattable then call is forwarded to that, otherwise .ToString() is called.
IWriterToRef<Guid, String> guidPrinter = Avalanche.Converter.StringConverter.Printer<Guid>();
string print = guidPrinter.Read( Guid.NewGuid() );
StringConverter.Printer(type) creates printer using runtime type argument.
IWriterToRef<Guid, String> guidPrinter = (IWriterToRef<Guid, String>) Avalanche.Converter.StringConverter.Printer(typeof(Guid));
string print = guidPrinter.Read( Guid.NewGuid() );
StringConverter.Parser<T>() returns string parser. T must implement IParsable<T>.
IWriterToRef<String, Guid> guidParser = Avalanche.Converter.StringConverter.Parser<Guid>();
bool ok = guidParser.TryRead("8b093aad-da89-4c15-a6e4-af7f79b26c2c", out Guid gui);
StringConverter.TryGetParser(type, out parser) tries to create parser. Fails T doesn't implement IParsable<T>.
Avalanche.Converter.StringConverter.TryGetParser(typeof(Guid), out IWriterFrom<string> guidParser);
bool ok = guidParser.TryReadAs<string, Guid>("8b093aad-da89-4c15-a6e4-af7f79b26c2c", out Guid gui);
For DateTime printing, it is recommended to provide an explicit StringConverter.FormatArgument(formatProvider, format) as argument. Otherwise DateTime.ToString() fallbacks to Thread.CurrentThread.CurrentCulture.
IWriterToRef<DateTime, String> dateTimePrinter = Avalanche.Converter.StringConverter.Printer<DateTime>();
var dateFormat = new Avalanche.Converter.StringConverter.FormatArgument(CultureInfo.InvariantCulture, "yyyyMMdd_HHmmss");
string print = dateTimePrinter.Read(DateTime.Now, dateFormat); // "20220505_101010"
For DateTime parsing, explicit StringConverter.FormatArgument(formatProvider, format) should be provided as argument. If not, parse fallbacks to Thread.CurrentThread.CurrentCulture.
IWriterToRef<String, DateTime> dateTimeParser = Avalanche.Converter.StringConverter.Parser<DateTime>();
var dateFormat = new Avalanche.Converter.StringConverter.FormatArgument(CultureInfo.InvariantCulture, "yyyyMMdd_HHmmss");
bool ok = dateTimeParser.TryRead("20200505_101010", out DateTime dateTime, dateFormat);
Printers and parsers can be requested from service provider.
// Create service stack
IService service = Services.Create(ConverterHandlers.Instance);
// Create converter request
ConverterRequest converterRequest = new ConverterRequest(typeof(Guid), typeof(string));
// Query converter
IWriterToRef<Guid, string> converter = service.GetRequired<ConverterRequest, IWriterToRef<Guid, string>>(converterRequest);
// Convert
string print = converter.Read<Guid, string>( Guid.NewGuid() );
Full Example
Full example
using System;
using System.Globalization;
using System.Threading;
using Avalanche.Converter;
using Avalanche.Service;
using Avalanche.Writer;
public class stringconverter
{
public static void Run()
{
{
// <00>
bool ok = StringConverter.TryGet(typeof(Guid), typeof(string), out IWriter converter);
string value = converter.ReadAs<Guid, string>( Guid.NewGuid() );
// </00>
}
{
// <01>
IWriterToRef<Guid, String> guidPrinter = Avalanche.Converter.StringConverter.Printer<Guid>();
string print = guidPrinter.Read( Guid.NewGuid() );
// </01>
}
{
// <02>
IWriterToRef<Guid, String> guidPrinter = (IWriterToRef<Guid, String>) Avalanche.Converter.StringConverter.Printer(typeof(Guid));
string print = guidPrinter.Read( Guid.NewGuid() );
// </02>
}
{
// <03>
IWriterToRef<String, Guid> guidParser = Avalanche.Converter.StringConverter.Parser<Guid>();
bool ok = guidParser.TryRead("8b093aad-da89-4c15-a6e4-af7f79b26c2c", out Guid gui);
// </03>
}
{
// <04>
Avalanche.Converter.StringConverter.TryGetParser(typeof(Guid), out IWriterFrom<string> guidParser);
bool ok = guidParser.TryReadAs<string, Guid>("8b093aad-da89-4c15-a6e4-af7f79b26c2c", out Guid gui);
// </04>
}
{
// <05>
IWriterToRef<DateTime, String> dateTimePrinter = Avalanche.Converter.StringConverter.Printer<DateTime>();
var dateFormat = new Avalanche.Converter.StringConverter.FormatArgument(CultureInfo.InvariantCulture, "yyyyMMdd_HHmmss");
string print = dateTimePrinter.Read(DateTime.Now, dateFormat); // "20220505_101010"
// </05>
}
{
// <06>
IWriterToRef<String, DateTime> dateTimeParser = Avalanche.Converter.StringConverter.Parser<DateTime>();
var dateFormat = new Avalanche.Converter.StringConverter.FormatArgument(CultureInfo.InvariantCulture, "yyyyMMdd_HHmmss");
bool ok = dateTimeParser.TryRead("20200505_101010", out DateTime dateTime, dateFormat);
// </06>
}
{
// <07>
// Create service stack
IService service = Services.Create(ConverterHandlers.Instance);
// Create converter request
ConverterRequest converterRequest = new ConverterRequest(typeof(Guid), typeof(string));
// Query converter
IWriterToRef<Guid, string> converter = service.GetRequired<ConverterRequest, IWriterToRef<Guid, string>>(converterRequest);
// Convert
string print = converter.Read<Guid, string>( Guid.NewGuid() );
// </07>
}
}
}