无法解析类型:System.String,System.Private.CoreLib,版本4.0.0.0-Asp.net Core(.net core 2.1)服务器,.NET 4.6.1 Client

时间:2019-05-31 08:58:18

标签: c# .net asp.net-core .net-core protobuf-net

我有一个用.net 4.6.1编写的旧客户端应用程序,它使用WCF服务器的数据。 我正在尝试用ASP.NET Core应用程序和Protobuf序列化替换WCF服务器。 我正在使用图书馆:

尝试在客户端反序列化返回的内容,如下所示:

var resultData = ProtoBuf.Serializer.Deserialize<ExcelDropdownNode>(response.Content.ReadAsStreamAsync().Result);

但是protobuf库出现错误:

  

无法解析类型:System.String,System.Private.CoreLib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e(您可以使用TypeModel.DynamicTypeFormatting事件提供自定义映射)

任何想法我会做错什么吗?

请注意,我必须在服务器中返回动态数据,而protobuf对此并不满意。我已经用List<object>标记了DynamicType=True属性,并将所有ValueTypes更改为字符串(即4->“ 4”)。这允许服务器端的序列化工作。

ExcelDropDownCode中的动态属性如下:

[ProtoMember(1, DynamicType = true)]
public List<object> DataItems
{
    get { return dataItems; }
    set { dataItems = value; }
}

1 个答案:

答案 0 :(得分:1)

设法通过在客户端添加以下类型解析代码来解决:

RuntimeTypeModel.Default.DynamicTypeFormatting += (sender, args) => {
if (args.FormattedName.Contains("System.String, System.Private.CoreLib"))
{
    args.Type = typeof(string);
}};