TypeDescriptor.GetConverter(Type)a very convientent way,用于将许多内置数据类型与字符串串行化/反序列化:

object original = ...;

string serialized = TypeDescriptor.GetConverter(t).ConvertToInvariantString(original);
object deserialized = TypeDescriptor.GetConverter(t).ConvertFromInvariantString(serialized);


不幸的是,TypeDescriptor在可移植类库中不可用。

是否有规范的替代方法,还是我们必须返回大量的switch语句?

最佳答案

TypeDescriptor在PCL中不可用,但在使用PCL的实际客户端上可能可用。

这是我用来从Xamarin Android项目注入Mono TypeDescriptor的解决方法:

PCL:

public interface IPclWorkaround
{
    ConvertFromInvariantString(Type type, string s);
}


Xamarin Android:

[assembly: Dependency(typeof(PclWorkaround))]

class PclWorkaround : IPclWorkaround
{
    public object ConvertFromInvariantString(Type type, string s)
    {
        return TypeDescriptor.GetConverter(type).ConvertFromInvariantString(s);
    }
}


在PCL中的用法:

var myObject = DependencyService.Get<IPclWorkaround>.ConvertFromInvariantString(type, myString);

08-07 10:30