从stringType.GetType(string)与Type.AssemblyQualifiedName和Type.FullName获取System.Type实例

我的服务器(IIS,ASP.NET)接收来自基于不同平台(UWP,Windows Phone 8.1,Xamarin.Android,Xamarin.iOS)的客户端的请求,并且这些客户端处理来自我的服务器的响应。

当我在我的服务器上处理一个请求或者在客户端上处理一个响应时,我会处理以下数据:

  1. 值types信息 – 从someValue.GetType()获得。 AssemblyQualifiedName
  2. 以序列化的forms(字节数组)表示值本身。

为了反序列化我用来执行以下操作的数据:

Type valueType = Type.GetType(iValue.assemblyQualifiedName, true); object value = <deserializing value using its valueType> 

在服务器端和客户端都能正常工作,直到我开始处理使用.NET本地工具链编译的UWP客户端。

问题是基本types,如System.String用于驻留在mscorlib程序集,但在新的UWP客户端stringValue.GetType().AssemblyQualifiedName返回类似

System.String,System.Private.CoreLib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a

这导致我的服务器上出现以下exception:

无法加载文件或程序集“System.Private.CoreLib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”或其某个依赖项。 该系统找不到指定的文件。

Type.GetType(iValue.assemblyQualifiedName, true)

如果我得到了正确的结果,我可以使用Type.FullName的Type.GetType方法,而不是Type.AssemblyQualifiedName在Mscorlib程序集中定义的types。

但是我的代码在所有的客户端和服务器(PCL)之间是统一的。 如果在UWP客户端的System.Private.CoreLib程序集中定义了一个types,该怎么办? 我该如何更好地处理这个问题呢?